Sobes.tech
Junior

Ποια μοτίβα σχεδίασης γνωρίζετε;

sobes.tech AI

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

Δημιουργοί:

  • Singleton: Διασφαλίζει ότι υπάρχει μόνο ένα αντίγραφο μιας κλάσης και παρέχει μια παγκόσμια πρόσβαση σε αυτό.
  • Factory Method: Ορίζει μια διεπαφή για τη δημιουργία ενός αντικειμένου, αλλά επιτρέπει στις υποκλάσεις να αποφασίζουν ποια κλάση να δημιουργήσουν.
  • Abstract Factory: Παρέχει μια διεπαφή για τη δημιουργία οικογενειών σχετικών ή εξαρτώμενων αντικειμένων, χωρίς να καθορίζει τις συγκεκριμένες κλάσεις τους.
  • Builder: Διαχωρίζει την κατασκευή ενός σύνθετου αντικειμένου σε βήματα, επιτρέποντας τη δημιουργία διαφορετικών παρουσιάσεων του αντικειμένου με τη χρήση της ίδιας διαδικασίας κατασκευής.
  • Prototype: Δημιουργεί αντικείμενα αντιγράφοντας ένα υπάρχον αντίγραφο (πρωτότυπο), αντί να επαναλαμβάνει τη διαδικασία κατασκευής.

Δομικά:

  • Adapter: Μετατρέπει το interface μιας κλάσης σε ένα άλλο interface που αναμένουν οι πελάτες. Επιτρέπει τη δουλειά με κλάσεις με ασυμβίβαστα interfaces.
  • Bridge: Διαχωρίζει την αφαιρετικότητα από την υλοποίησή της, επιτρέποντάς τους να αλλάζουν ανεξάρτητα.
  • Composite: Συνθέτει αντικείμενα σε δέντρα δομές για την αναπαράσταση ιεραρχιών "μέρος-όλο". Επιτρέπει στους πελάτες να εργάζονται ομοιόμορφα με μεμονωμένα αντικείμενα και συνθέσεις αντικειμένων.
  • Decorator: Προσθέτει δυναμικά νέες ευθύνες σε ένα αντικείμενο, τυλίγοντάς το σε ένα ειδικό αντικείμενο-διακοσμητή.
  • Facade: Παρέχει μια ενοποιημένη διεπαφή σε ένα σύνολο διεπαφών ενός υποσυστήματος. Ορίζει ένα ανώτερο επίπεδο διεπαφής που απλοποιεί τη χρήση του υποσυστήματος.
  • Flyweight: Χρησιμοποιεί κοινόχρηστη κατάσταση μεταξύ πολλών μικρών αντικειμένων για να μειώσει την κατανάλωση μνήμης και να αυξήσει την απόδοση.
  • Proxy: Παρέχει έναν αντικαταστάτη για ένα αντικείμενο που διαχειρίζεται την πρόσβαση στο αρχικό αντικείμενο.

Αντιδραστικά:

  • Chain of Responsibility: Μεταφέρει ένα αίτημα μέσω μιας αλυσίδας χειριστών. Κάθε χειριστής αποφασίζει αν θα επεξεργαστεί το αίτημα ή θα το μεταβιβάσει στον επόμενο.
  • Command: Encapsulates a request as an object, allowing clients to be parameterized with different requests, queue requests, or log them.
  • Interpreter: Ορίζει τη γραμματική δομή μιας γλώσσας και περιλαμβάνει έναν ερμηνευτή για την ερμηνεία προτάσεων σε αυτή τη γλώσσα.
  • Iterator: Παρέχει έναν τρόπο διαδοχικής πρόσβασης σε όλα τα στοιχεία ενός σύνθετου αντικειμένου, χωρίς να αποκαλύπτει την εσωτερική του αναπαράσταση.
  • Mediator: Ορίζει αντικείμενα που διαχειρίζονται την αλληλεπίδραση μεταξύ άλλων αντικειμένων. Προάγει τον ασθενή συσχετισμό, επιτρέποντας στα αντικείμενα να αλληλεπιδρούν χωρίς άμεσες αναφορές μεταξύ τους.
  • Memento: Παρέχει τη δυνατότητα αποθήκευσης και επαναφοράς της εσωτερικής κατάστασης ενός αντικειμένου χωρίς να παραβιάζει την εν encapsulation.
  • Observer: Ορίζει μια εξάρτηση "ένα προς πολλά" μεταξύ αντικειμένων, έτσι ώστε όταν αλλάζει η κατάσταση ενός αντικειμένου, όλα τα εξαρτώμενα αντικείμενα να ενημερώνονται και να ενημερώνονται αυτόματα.
  • State: Επιτρέπει σε ένα αντικείμενο να αλλάζει τη συμπεριφορά του ανάλογα με την εσωτερική του κατάσταση. Κάθε κατάσταση είναι εν encapsulated σε μια ξεχωριστή κλάση.
  • Strategy: Ορίζει μια οικογένεια αλγορίθμων, τους εν encapsulates και τους καθιστά εναλλάξιμους. Επιτρέπει την επιλογή αλγορίθμου κατά την εκτέλεση.
  • Template Method: Ορίζει το πλαίσιο ενός αλγορίθμου σε μια λειτουργία, αναβάλλοντας ορισμένα βήματα σε υποκλάσεις. Επιτρέπει στις υποκλάσεις να ορίζουν τα βήματα του αλγορίθμου χωρίς να αλλάζουν τη δομή του.
  • Visitor: Αντιπροσωπεύει μια λειτουργία που πρέπει να εκτελεστεί στα στοιχεία μιας δομής αντικειμένων. Επιτρέπει τον ορισμό νέων λειτουργιών χωρίς να αλλάζει τις κλάσεις των στοιχείων.

Στην ανάπτυξη iOS, συχνά συναντώνται επίσης:

  • Model-View-Controller (MVC): Ένα αρχιτεκτονικό μοτίβο που διαχωρίζει την εφαρμογή σε τρία συσχετιζόμενα συστατικά: Μοντέλο (δεδομένα και επιχειρηματική λογική), Προβολή (διεπαφή χρήστη) και Ελεγκτής (σύνδεση μεταξύ Μοντέλου και Προβολής).
  • Delegate: Ένα μοτίβο που επιτρέπει σε ένα αντικείμενο να ενεργεί εκ μέρους ή να συντονίζει τις ενέργειες ενός άλλου αντικειμένου.
  • Observer (NotificationCenter): Ένα σύστημα διανομής μηνυμάτων που επιτρέπει στα αντικείμενα να λαμβάνουν μηνύματα χωρίς άμεση σύνδεση.
  • Target-Action: Ένας μηχανισμός που χρησιμοποιείται για την αποστολή μηνυμάτων από στοιχεία ελέγχου (π.χ. κουμπιά) σε τοπικό αντικείμενο.
  • Coordinator: Ένα μοτίβο για τη διαχείριση ροών πλοήγησης σε μια εφαρμογή, διαχωρίζοντας τη λογική πλοήγησης από τους ελεγκτές.
  • Dependency Injection: Ένα μοτίβο όπου οι εξαρτήσεις ενός αντικειμένου εγχύονται από το εξωτερικό, αντί να δημιουργούνται από το ίδιο το αντικείμενο.
// Παράδειγμα Singleton
class SettingsManager {
    static let shared = SettingsManager() // Μοναδική instance

    private init() {
        // Ιδιωτικός αρχικοποιητής για να αποτρέψει τη δημιουργία από έξω
    }

    var appVersion: String {
        return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Άγνωστο"
    }
}

// Χρήση
let settings = SettingsManager.shared
print("Έκδοση εφαρμογής: \(settings.appVersion)")
// Παράδειγμα Delegate (απλό)
protocol ButtonDelegate: AnyObject {
    func buttonWasTapped(_ button: UIButton)
}

class MyButton: UIButton {
    weak var delegate: ButtonDelegate? // Ιδιότητα delegate

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        delegate?.buttonWasTapped(self) // Κλήση μεθόδου delegate
    }
}

class ViewController: UIViewController, ButtonDelegate {
    override func viewDidLoad() {
        super.viewDidLoad()
        let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
        myButton.setTitle("Tap Me", for: .normal)
        myButton.backgroundColor = .blue
        myButton.delegate = self // Ορισμός delegate
        view.addSubview(myButton)
    }

    func buttonWasTapped(_ button: UIButton) {
        print("Το κουμπί πατήθηκε στο ViewController")
    }
}