Junior
Welche Designmuster kennen Sie?
sobes.tech KI
Antwort von AI
Erzeugungsmuster:
- Singleton: Gewährleistet, dass nur eine Instanz einer Klasse existiert, und stellt einen globalen Zugriffspunkt darauf bereit.
- Factory Method: Definiert eine Schnittstelle zur Objekterstellung, lässt jedoch Unterklassen entscheiden, welche Klasse instanziiert wird.
- Abstract Factory: Bietet eine Schnittstelle zur Erstellung von Familien verwandter oder abhängiger Objekte, ohne ihre konkreten Klassen anzugeben.
- Builder: Teilt die Konstruktion eines komplexen Objekts in Schritte auf, sodass unterschiedliche Darstellungen des Objekts mit demselben Bauprozess erstellt werden können.
- Prototype: Erstellt Objekte durch Duplizieren einer bestehenden Instanz (Prototyp), anstatt den Erstellungsprozess neu durchzuführen.
Strukturelle Muster:
- Adapter: Wandelt die Schnittstelle einer Klasse in eine andere um, die die Clients erwarten. Ermöglicht die Zusammenarbeit von Klassen mit inkompatiblen Schnittstellen.
- Bridge: Trennt die Abstraktion von ihrer Implementierung, sodass beide unabhängig voneinander variieren können.
- Composite: Kombiniert Objekte in Baumstrukturen, um Hierarchien Teil-Ganzes darzustellen. Ermöglicht es, einzelne Objekte und Objektkompositionen einheitlich zu behandeln.
- Decorator: Fügt einem Objekt dynamisch zusätzliche Verantwortlichkeiten hinzu, indem es es in ein Dekorator-Objekt einschließt.
- Facade: Bietet eine einheitliche Schnittstelle zu einem Satz von Schnittstellen eines Subsystems. Definiert eine höhere Abstraktionsebene, die die Nutzung des Subsystems vereinfacht.
- Flyweight: Nutzt geteilten Zustand zwischen vielen kleinen Objekten, um Speicherplatz zu sparen und die Leistung zu verbessern.
- Proxy: Bietet einen Stellvertreter oder Vertreter für ein anderes Objekt, das den Zugriff darauf steuert.
Verhaltensmuster:
- Chain of Responsibility: Leitet eine Anfrage entlang einer Kette von Handlern weiter. Jeder Handler entscheidet, ob er die Anfrage bearbeitet oder an den nächsten weitergibt.
- Command: Kapselt eine Anfrage als Objekt, sodass verschiedene Clients mit unterschiedlichen Anfragen parametrisiert, Anfragen in eine Warteschlange gestellt oder protokolliert werden können.
- Interpreter: Definiert die Grammatik einer Sprache und stellt einen Interpreter bereit, um Ausdrücke in dieser Sprache zu interpretieren.
- Iterator: Bietet eine Methode, um sequenziell auf alle Elemente einer Sammlung zuzugreifen, ohne ihre interne Darstellung offenzulegen.
- Mediator: Definiert Objekte, die die Interaktion zwischen einer Menge von Objekten steuern. Fördert lose Kopplung, indem die Objekte über einen Mediator interagieren.
- Memento: Ermöglicht das Speichern und Wiederherstellen des internen Zustands eines Objekts, ohne seine Kapselung zu verletzen.
- Observer: Definiert eine 1-zu-viele-Abhängigkeit zwischen Objekten, sodass bei einer Zustandsänderung alle abhängigen Objekte benachrichtigt und automatisch aktualisiert werden.
- State: Ermöglicht einem Objekt, sein Verhalten zu ändern, wenn sich sein interner Zustand ändert. Das Objekt scheint seine Klasse zu wechseln.
- Strategy: Definiert eine Familie von Algorithmen, kapselt jeden und macht sie austauschbar. Ermöglicht die Auswahl des Algorithmus zur Laufzeit.
- Template Method: Definiert den Rahmen eines Algorithmus in einer Operation, wobei einige Schritte den Unterklassen überlassen werden. Ermöglicht es den Unterklassen, bestimmte Schritte des Algorithmus neu zu definieren, ohne die Struktur zu ändern.
- Visitor: Repräsentiert eine Operation, die auf die Elemente einer Objektstruktur angewendet werden soll. Ermöglicht die Definition neuer Operationen, ohne die Klassen der Elemente zu ändern.
In der iOS-Entwicklung treten außerdem häufig auf:
- Model-View-Controller (MVC): Architektonisches Muster, das die Anwendung in drei verbundene Komponenten unterteilt: Modell (Daten und Geschäftslogik), Ansicht (Benutzeroberfläche) und Controller (Verbindung zwischen Modell und Ansicht).
- Delegate: Muster, das es einem Objekt ermöglicht, im Namen eines anderen zu handeln oder Aktionen zu koordinieren.
- Observer (NotificationCenter): Benachrichtigungssystem, das es Objekten ermöglicht, Nachrichten zu empfangen, ohne eine direkte Verbindung zueinander zu haben.
- Target-Action: Mechanismus, der verwendet wird, um Nachrichten von Steuerelementen (z.B. Buttons) an ein Zielobjekt zu senden.
- Coordinator: Muster zur Verwaltung von Navigationsflüssen in einer Anwendung, das die Navigationslogik von den Controllern trennt.
- Dependency Injection: Muster, bei dem die Abhängigkeiten eines Objekts von außen injiziert werden, anstatt vom Objekt selbst erstellt zu werden.
// Beispiel Singleton
class SettingsManager {
static let shared = SettingsManager() // Einzige Instanz
private init() {
// Privater Initialisierer, um externe Erstellung zu verhindern
}
var appVersion: String {
return Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unbekannt"
}
}
// Verwendung
let settings = SettingsManager.shared
print("App-Version: \(settings.appVersion)")
// Beispiel Delegate (einfach)
protocol ButtonDelegate: AnyObject {
func buttonWasTapped(_ button: UIButton)
}
class MyButton: UIButton {
weak var delegate: ButtonDelegate? // Delegate-Eigenschaft
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
delegate?.buttonWasTapped(self) // Aufruf der Delegate-Methode
}
}
class ViewController: UIViewController, ButtonDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let myButton = MyButton(frame: CGRect(x: 50, y: 50, width: 100, height: 40))
myButton.setTitle("Tippe mich", for: .normal)
myButton.backgroundColor = .blue
myButton.delegate = self // Delegate setzen
view.addSubview(myButton)
}
func buttonWasTapped(_ button: UIButton) {
print("Button wurde im ViewController angetippt")
}
}