Junior
Ce modele de proiectare cunoașteți?
sobes.tech AI
Răspuns de la AI
Creatori:
- Singleton: Asigură existența unei singure instanțe a unei clase și oferă un punct de acces global la aceasta.
- Factory Method: Definește o interfață pentru crearea unui obiect, dar permite subclasei să decidă ce clasă să instanțieze.
- Abstract Factory: Oferă o interfață pentru crearea familiilor de obiecte legate sau dependente, fără a specifica clasele lor concrete.
- Builder: Împarte construcția unui obiect complex în pași, permițând crearea de reprezentări diferite ale obiectului folosind același proces de construcție.
- Prototype: Creează obiecte duplicând o instanță existentă (prototip), în loc să repete procesul de construcție.
Structurale:
- Adapter: Transformă interfața unei clase într-o altă interfață așteptată de clienți. Permite lucrul cu clase cu interfețe incompatibile.
- Bridge: Separă abstracția de implementarea sa, permițându-le să evolueze independent.
- Composite: Combină obiecte într-o structură arborescentă pentru a reprezenta ierarhii "parte-întreg". Permite clienților să lucreze uniform cu obiecte individuale și cu compoziții de obiecte.
- Decorator: Adaugă dinamic responsabilități noi unui obiect, învelindu-l într-un obiect decorator special.
- Facade: Oferă o interfață unificată pentru un set de interfețe ale subsistemului. Definește o interfață de nivel superior care simplifică utilizarea subsistemului.
- Flyweight: Utilizează starea partajată între multiple obiecte mici pentru a reduce consumul de memorie și a crește performanța.
- Proxy: Oferă un substitut pentru un obiect, gestionând accesul la obiectul original.
Comportamentale:
- Chain of Responsibility: Transmite o solicitare de-a lungul unui lanț de handler-e. Fiecare handler decide dacă va procesa solicitarea sau o va transmite mai departe.
- Command: Încapsulează o solicitare ca obiect, permițând parametrizarea clienților cu solicitări diferite, plasarea solicitărilor în coadă sau logarea lor.
- Interpreter: Definește structura gramaticală a unui limbaj și include un interpret pentru interpretarea propozițiilor în acest limbaj.
- Iterator: Oferă o modalitate de acces secvențial la toate elementele unui obiect compus, fără a expune reprezentarea sa internă.
- Mediator: Definește obiecte care gestionează interacțiunea între alte obiecte. Favorizează cuplajul slab, permițând obiectelor să comunice fără referințe explicite între ele.
- Memento: Oferă posibilitatea de a salva și restaura starea internă a unui obiect fără a încălca încapsularea.
- Observer: Definește o dependență "unu-la-mulți" între obiecte, astfel încât atunci când starea unui obiect se schimbă, toate obiectele dependente sunt notificate și actualizate automat.
- State: Permite unui obiect să își schimbe comportamentul în funcție de starea sa internă. Fiecare stare este încapsulată într-o clasă separată.
- Strategy: Definește o familie de algoritmi, îi încapsulează și îi face interschimbabili. Permite alegerea algoritmului în timpul execuției.
- Template Method: Definește scheletul unui algoritm într-o operație, amânând unele pași pentru subclase. Permite subclasei să definească pașii algoritmului fără a modifica structura algoritmului.
- Visitor: Reprezintă o operație care trebuie executată pe elementele structurii de obiecte. Permite definirea de noi operații fără a modifica clasele elementelor.
În dezvoltarea iOS, de asemenea, sunt frecvent întâlnite:
- Model-View-Controller (MVC): Un pattern arhitectural care împarte aplicația în trei componente corelate: Model (date și logică de business), View (interfața utilizatorului) și Controller (legătura între Model și View).
- Delegate: Un pattern care permite unui obiect să acționeze în numele sau să coordoneze acțiunile altui obiect.
- Observer (NotificationCenter): Un sistem de difuzare a mesajelor care permite obiectelor să primească mesaje fără o legătură directă.
- Target-Action: Un mecanism utilizat pentru a trimite mesaje de la elemente de control (cum ar fi butoane) către obiectul țintă.
- Coordinator: Un pattern pentru gestionarea fluxurilor de navigație într-o aplicație, separând logica de navigație de controlere.
- Dependency Injection: Un pattern în care dependențele unui obiect sunt injectate din exterior, în loc să fie create de obiectul însuși.
// Exemplu Singleton
class SettingsManager {
static let shared = SettingsManager() // Instanță unică
private init() {
// Inițializare privată pentru a preveni crearea externă
}
var appVersion: String {
return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Necunoscut"
}
}
// Utilizare
let settings = SettingsManager.shared
print("Versiunea aplicației: \(settings.appVersion)")
// Exemplu Delegate (simplu)
protocol ButtonDelegate: AnyObject {
func buttonWasTapped(_ button: UIButton)
}
class MyButton: UIButton {
weak var delegate: ButtonDelegate? // Proprietate delegate
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
delegate?.buttonWasTapped(self) // Apelare metodă 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 // Setare delegate
view.addSubview(myButton)
}
func buttonWasTapped(_ button: UIButton) {
print("Butonul a fost apăsat în ViewController")
}
}