Sobes.tech
Middle

Ποια πρότυπα σχεδίασης, εκτός από το Singleton, έχετε χρησιμοποιήσει;

sobes.tech AI

Απάντηση από AI

  • Μέθοδος Εργοστασίου. Χρησιμοποιείται για τη δημιουργία αντικειμένων χωρίς να καθορίζεται ρητά ο συγκεκριμένος τύπος κλάσης. Είναι χρήσιμη όταν η λογική δημιουργίας αντικειμένου εξαρτάται από τις υποκλάσεις.
  • Αφηρημένο Εργοστάσιο. Χρησιμοποιείται για τη δημιουργία οικογενειών σχετικών ή εξαρτώμενων αντικειμένων, παρέχοντας ένα διεπαφή για αυτό, αλλά χωρίς να καθορίζει συγκεκριμένες κλάσεις.
  • Builder. Χρησιμοποιείται για την βήμα προς βήμα δημιουργία σύνθετων αντικειμένων, όπου η σειρά και ο συνδυασμός των βημάτων μπορεί να διαφέρει. Αποφεύγει τον "τηλεσκοπικό κατασκευαστή".
  • Παρατηρητής (Observer). Υλοποιείται για τη δημιουργία εξαρτήσεων "ένα προς πολλά" μεταξύ αντικειμένων, όπου μια αλλαγή στην κατάσταση ενός αντικειμένου ειδοποιεί αυτόματα όλα τα εξαρτώμενα αντικείμενα.
  • Στρατηγική (Strategy). Εφαρμόζεται για τον ορισμό μιας οικογένειας αλγορίθμων, την ενσωμάτωση καθενός και την εξασφάλιση της εναλλαξιμότητάς τους. Επιτρέπει την επιλογή του αλγορίθμου κατά την εκτέλεση.
  • Διακοσμητής (Decorator). Χρησιμοποιείται για την δυναμική προσθήκη νέων ευθυνών σε αντικείμενα χωρίς να αλλάζει η δομή τους.
  • Προξενιό (Proxy). Χρησιμοποιείται σε περιπτώσεις όπου χρειάζεται να ελέγχεται η πρόσβαση σε ένα αντικείμενο, π.χ. για lazy φόρτωση ή απομακρυσμένη πρόσβαση.
  • Μέθοδος Προτύπου (Template Method). Χρησιμοποιείται για τον ορισμό του σκελετού ενός αλγορίθμου στην υπερκλάση, επιτρέποντας στις υποκλάσεις να υπερκαλύπτουν ορισμένα βήματα του αλγορίθμου χωρίς να αλλάζουν τη βασική δομή.
  • Προσαρμογέας (Adapter). Χρησιμοποιείται για τη μετατροπή της διεπαφής μιας κλάσης στη διεπαφή που αναμένουν οι πελάτες. Επιτρέπει σε κλάσεις με ασυμβίβαστες διεπαφές να συνεργάζονται.
  • Εντολή (Command). Χρησιμοποιείται για την ενσωμάτωση ενός αιτήματος ως αντικείμενο, επιτρέποντας την παραμετροποίηση πελατών με διαφορετικά αιτήματα, την τοποθέτηση αιτημάτων σε ουρά ή την τήρηση αρχείου ενεργειών, καθώς και την υποστήριξη ακύρωσης ενεργειών.

Παράδειγμα υλοποίησης της Factory Method:

// Διεπαφή προϊόντος
interface Product {
    void doSomething();
}

// Συγκεκριμένα προϊόντα
class ConcreteProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("Κάνει κάτι στο Product A");
    }
}

class ConcreteProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("Κάνει κάτι στο Product B");
    }
}

// Διεπαφή κατασκευαστή
abstract class Creator {
    public abstract Product factoryMethod();

    public void someOperation() {
        Product product = factoryMethod();
        product.doSomething();
    }
}

// Συγκεκριμένοι κατασκευαστές
class ConcreteCreatorA extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    @Override
    public Product factoryMethod() {
        return new ConcreteProductB();
    }
}