Sobes.tech
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.