Middle+
Ποιες εργασίες λύσατε χρησιμοποιώντας μοτίβα σχεδίασης;
sobes.tech AI
Απάντηση από AI
Έχω εφαρμόσει διάφορα μοτίβα για τη βελτίωση της δομής και της συντηρησιμότητας του κώδικα:
Δημιουργικά:
- Singleton: Για τη δημιουργία μιας μοναδικής στιγμιότυπου αντικειμένων, π.χ. διαχειριστής ρυθμίσεων ή πινάκας συνδέσεων βάσης δεδομένων.
public final class ConfigManager { private static ConfigManager instance; private ConfigManager() {} // Ιδιωτικός κατασκευαστής public static synchronized ConfigManager getInstance() { if (instance == null) { instance = new ConfigManager(); } return instance; } } - Factory Method: Για τη δημιουργία αντικειμένων με συγκεκριμένες ιδιότητες χωρίς να δηλώνεται ρητά η συγκεκριμένη κλάση. Χρησιμοποιήθηκε κατά την εργασία με διάφορους τύπους parsers αρχείων.
- Abstract Factory: Για τη δημιουργία οικογενειών σχετικών ή εξαρτώμενων αντικειμένων χωρίς να δηλώνεται η συγκεκριμένη κλάση. Χρησιμοποιήθηκε για την εργασία με διάφορους τύπους πηγών δεδομένων (π.χ. σύστημα αρχείων, βάση δεδομένων) και τα αντίστοιχα αντικείμενα.
Δομικά:
- Adapter: Για την προσαρμογή του interface μιας κλάσης σε μια άλλη, που περιμένει ο πελάτης. Χρησιμοποιήθηκε για την ενσωμάτωση τρίτων βιβλιοθηκών με ασυμβίβαστα interfaces.
public interface Target { void request(); } public class Adaptee { public void specificRequest() { System.out.println("Ειδικό αίτημα του Adaptee"); } } public class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } - Decorator: Για την προσθήκη δυναμικά νέων ευθυνών σε αντικείμενα χωρίς να αλλάζει η δομή τους. Χρησιμοποιήθηκε για την προσθήκη λειτουργικότητας καταγραφής ή cache σε υπάρχοντα αντικείμενα.
- Composite: Για τη σύνθεση αντικειμένων σε δέντρα δομές, ώστε να αναπαριστούν ιεραρχίες "μέρος-ολόκληρο". Χρησιμοποιείται κατά την εργασία με στοιχεία διεπαφής χρήστη ή δομές αρχείων.
Συμπεριφορικά:
- Observer: Για τον ορισμό της εξάρτησης "ένα-προς-πολλά" μεταξύ αντικειμένων, έτσι ώστε όταν αλλάζει η κατάσταση ενός αντικειμένου, όλα τα εξαρτώμενα από αυτό να ενημερώνονται και να ανανεώνονται αυτόματα. Χρησιμοποιήθηκε για την υλοποίηση συστήματος ειδοποιήσεων για γεγονότα.
import java.util.ArrayList; import java.util.List; public class Subject { private List<Observer> observers = new ArrayList<>(); private int state; public void attach(Observer observer) { observers.add(observer); } public void setState(int state) { this.state = state; notifyObservers(); } private void notifyObservers() { for (Observer observer : observers) { observer.update(); } } } public interface Observer { void update(); } - Strategy: Alqoritmlərin ailəsini müəyyən etmək, hər birini kapsülləmək və onların yerinə yetirilməsini təmin etmək. Məlumatların işlənməsi üçün müxtəlif strategiyaları seçmək üçün istifadə olunurdu.
- Template Method: Alqoritmin skeletini müəyyən etmək, bəzi addımları alt siniflərə buraxmaq. Sorğu işləmə prosesini standartlaşdırmaq üçün tətbiq olunurdu.