This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
design_patterns [2025/08/30 09:06] 172.19.0.1 old revision restored (2025/08/30 02:58) |
design_patterns [2025/08/30 09:06] (current) 172.19.0.1 old revision restored (2025/08/30 02:59) |
||
---|---|---|---|
Line 34: | Line 34: | ||
* Verlassen Sie sich nicht auf eine bestimmte Reihenfolge der Benachrichtigung Ihrer Beobachter. | * Verlassen Sie sich nicht auf eine bestimmte Reihenfolge der Benachrichtigung Ihrer Beobachter. | ||
+ | ==== Decorator ==== | ||
+ | Fügt einem Objekt dynamisch zusätzliche Verantwortlichkeiten hinzu. Dekorierer bieten eine flexible Alternative zur Ableitung von Unterklassen zum Zweck der Erweiterung der Funktionalität. | ||
+ | |||
+ | Punkt für Punkt: | ||
+ | * Vererbung ist eine Form von Erweiterung, | ||
+ | * Unsere Entwürfe sollten die Erweiterung von Verhalten ermöglichen, | ||
+ | * Oft können Komposition und Delegierung verwendet werden, um zur Laufzeit neue Verhalten hinzuzufügen. | ||
+ | * Für die Erweiterung von Verhalten bietet das Decorator-Muster eine Alternative zur Ableitung von Unterklassen. | ||
+ | * Das Decorator-Muster schließt einen Satz von Dekorierer-Klassen ein, die verwendet werden, um konkrete Komponenten einzupacken. | ||
+ | * Dekorierer-Klassen spiegeln den Typ der Komponente wider, die sie dekorieren. (Sie haben tatsächlich den gleichen Typ wie die Komponente, die sie dekorieren, entweder durch Vererbung oder durch die Implementierung eines Interface.) | ||
+ | * Dekorierer ändern das Verhalten der Komponente, indem sie vor und/oder nach (oder auch an Stelle von) Methodenaufrufen auf der Komponente neue Funktionalitäten hinzufügen. | ||
+ | * Sie können eine Komponente mit einer beliebigen Zahl von Dekorierern einpacken. | ||
+ | * Dekorierer sind für die Clients der Komponente überlichweise transparent, | ||
+ | * Dekorierer können in Ihren Entwürfen zu vielen kleinen Objekten führen, und eine übermäßige Verwendung kann den Code unübersichtlich machen. | ||
==== Factory ==== | ==== Factory ==== | ||
Line 70: | Line 84: | ||
* Befehle können auch verwendet werden, um Loggings und Transaktionsysteme zu implementieren. | * Befehle können auch verwendet werden, um Loggings und Transaktionsysteme zu implementieren. | ||
+ | ==== Adapter, Facade ==== | ||
+ | |||
+ | **// | ||
+ | |||
+ | Das Adapter-Muster konvertiert die Schnittstelle einer Klasse in die Schnittstelle, | ||
+ | |||
+ | **// | ||
+ | |||
+ | Das Facade-Muster bietet eine vereinheitliche Schnittstelle für einen Satz von Schnittstellen eines Basissystems. Die Fassade definiert eine hochstufigere Schnittstelle, | ||
+ | |||
+ | Punkt für Punkt: | ||
+ | * Nehmen Sie Adapter, wenn Sie eine bestehende Klasse verwenden müssen und ihre Schnittstelle nicht der entspricht, die Sie benötigen. | ||
+ | * Verwenden Sie Facade, wenn Sie eine größere Schnittstelle oder eine komplexe Menge von Schnittstellen vereinfachen müssen. | ||
+ | * Ein Adapter ändert eine Schnittstelle in die, die ein Client erwartet. | ||
+ | * Eine Fassade entkoppelt eine Client von einem komplexen Basissystem. | ||
+ | * Je nach Größe und Komplexität einer Ziel-Schnittstelle kann es etwas Arbeit sein, einen Adapter zu implementieren. | ||
+ | * Bei der Implementierung einer Fassade ist es erforderlich, | ||
+ | * Es gibt zwei Formen des Adapter-Musters: | ||
+ | * Für ein Basissystem können Sie mehr als eine Fassade implementieren. | ||
+ | * Ein Adapter umhüllt ein Objekt, um seine Schnittstelle zu ändern, ein Dekorierer umhüllt ein Objekt, um neue Verhalten und Verantwortlichkeiten hinzuzufügen, | ||
==== Template Method ==== | ==== Template Method ==== |