Sobes.tech
Junior

Welke ontwerppatronen kent u?

sobes.tech AI

Antwoord van AI

Creaties:

  • Singleton: Zorgt ervoor dat er slechts één instantie van een klasse bestaat en biedt een globale toegangspunt tot die instantie.
  • Factory Method: Definieert een interface voor het maken van een object, maar laat subklassen beslissen welke klasse te instantiëren.
  • Abstract Factory: Biedt een interface voor het creëren van families van gerelateerde of afhankelijke objecten, zonder hun concrete klassen te specificeren.
  • Builder: Verdeelt de constructie van een complex object in stappen, waardoor het mogelijk is om verschillende representaties van het object te creëren met hetzelfde constructieproces.
  • Prototype: Creëert objecten door een bestaand exemplaar (prototype) te dupliceren, in plaats van het herhalen van het constructieproces.

Structurele:

  • Adapter: Transformeert de interface van een klasse naar een andere interface die door de klanten wordt verwacht. Maakt het mogelijk om te werken met klassen met incompatibele interfaces.
  • Bridge: Scheidt abstractie van de implementatie, waardoor ze onafhankelijk kunnen veranderen.
  • Composite: Combineert objecten in boomstructuren om hiërarchieën "deel-geheel" weer te geven. Maakt het mogelijk voor klanten om op een uniforme manier te werken met individuele objecten en samenstellingen van objecten.
  • Decorator: Voegt dynamisch nieuwe verantwoordelijkheden toe aan een object door het in een speciale decorator-klasse te wikkelen.
  • Facade: Biedt een eenduidige interface voor een set van interfaces in een subsysteem. Definieert een hogere abstractielaag die het gebruik van het subsysteem vereenvoudigt.
  • Flyweight: Gebruikt gedeelde toestand tussen veel kleine objecten om het geheugengebruik te verminderen en de prestaties te verhogen.
  • Proxy: Biedt een vervanger voor een object die de toegang tot het originele object beheert.

Gedragsmatige:

  • Chain of Responsibility: Stuurt een verzoek door een keten van handlers. Elke handler beslist of het verzoek wordt afgehandeld of doorgestuurd naar de volgende handler.
  • Command: Encapsuleert een verzoek als een object, waardoor het mogelijk is om clients te parametriseren met verschillende verzoeken, verzoeken in een wachtrij te plaatsen of te loggen.
  • Interpreter: Definieert de grammaticale structuur van een taal en bevat een interpreter om zinnen in die taal te interpreteren.
  • Iterator: Biedt een manier om sequentieel toegang te krijgen tot alle elementen van een samengesteld object, zonder de interne representatie bloot te geven.
  • Mediator: Definieert objecten die de interactie tussen andere objecten beheren. Bevordert losgekoppeldheid, waardoor objecten kunnen communiceren zonder expliciete verwijzingen naar elkaar.
  • Memento: Biedt de mogelijkheid om de interne toestand van een object op te slaan en te herstellen zonder de encapsulatie te schenden.
  • Observer: Definieert een "een-op-veel" afhankelijkheid tussen objecten, zodat wanneer de toestand van één object verandert, alle afhankelijke objecten worden geïnformeerd en automatisch bijgewerkt.
  • State: Stelt een object in staat om zijn gedrag te wijzigen afhankelijk van zijn interne toestand. Elke toestand is ingekapseld in een aparte klasse.
  • Strategy: Definieert een familie van algoritmen, encapsuleert elk ervan en maakt ze uitwisselbaar. Maakt het mogelijk om tijdens runtime een algoritme te kiezen.
  • Template Method: Definieert het raamwerk van een algoritme in een operatie, waarbij sommige stappen worden uitgesteld tot subklassen. Maakt het mogelijk voor subklassen om de stappen van het algoritme te definiëren zonder de structuur van het algoritme te wijzigen.
  • Visitor: Vertegenwoordigt een operatie die moet worden uitgevoerd op de elementen van een objectstructuur. Maakt het mogelijk om nieuwe operaties te definiëren zonder de klassen van de elementen te wijzigen.

In iOS-ontwikkeling worden ook vaak:

  • Model-View-Controller (MVC): Een architectuurpatroon dat de applicatie verdeelt in drie gerelateerde componenten: Model (gegevens en bedrijfslogica), View (gebruikersinterface) en Controller (verbinding tussen Model en View).
  • Delegate: Een patroon dat het mogelijk maakt dat één object handelt namens of coördineert acties van een ander object.
  • Observer (NotificationCenter): Een berichtendistributiesysteem dat objecten in staat stelt berichten te ontvangen zonder directe koppeling.
  • Target-Action: Een mechanisme dat wordt gebruikt om berichten te verzenden van control elementen (zoals knoppen) naar het doelobject.
  • Coordinator: Een patroon voor het beheren van navigatiestromen in een app, waarbij de navigatielogica wordt gescheiden van de controllers.
  • Dependency Injection: Een patroon waarbij de afhankelijkheden van een object van buitenaf worden geïnjecteerd in plaats van door het object zelf te worden gemaakt.
// Voorbeeld Singleton
class SettingsManager {
    static let shared = SettingsManager() // Enkele instantie

    private init() {
        // Privé initializer om extern maken te voorkomen
    }

    var appVersion: String {
        return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Onbekend"
    }
}

// Gebruik
let settings = SettingsManager.shared
print("Versie van de app: \(settings.appVersion)")
// Voorbeeld Delegate (eenvoudig)
protocol ButtonDelegate: AnyObject {
    func buttonWasTapped(_ button: UIButton)
}

class MyButton: UIButton {
    weak var delegate: ButtonDelegate? // Delegate eigenschap

    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
        super.touchesEnded(touches, with: event)
        delegate?.buttonWasTapped(self) // Roep delegate-methode aan
    }
}

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 // Stel delegate in
        view.addSubview(myButton)
    }

    func buttonWasTapped(_ button: UIButton) {
        print("De knop is getapt in ViewController")
    }
}