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")
}
}