Sobes.tech
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")
    }
}