Design Patterns
Strukturmuster
Struktur ist alles
Strukturmuster
Struktur ist alles
Strukturmuster sind Entwurfsmuster, die sich mit der Strukturierung von Klassen und Objekten beschäftigen.
Allen Kapiteln wurde eine eindeutige Nummerierung, der Richtliniennummer, hinzugefügt, um eine eindeutige Identifikation zu ermöglichen. Jede Richtliniennummer besteht aus dem Buchstaben DPS(Design Pattern Structural) gefolgt von einer Nummer, die den Abschnitt identifiziert. Damit kann eine Regel eindeutig identifiziert werden, z.B. für ein Code-Review.
Das Adapter Pattern ermöglicht es, zwei Objekte mit inkompatiblen Schnittstellen miteinander zu verbinden.
interface Adapter {
request(): string;
}
class ConcreteAdapter implements Adapter {
private adaptee: Adaptee;
constructor(adaptee: Adaptee) {
this.adaptee = adaptee;
}
request(): string {
return adaptee.specificRequest();
}
}
// Client kommuniziert mit Adaptee
class Adaptee {
specificRequest(): string {
return 'Specific request.';
}
}
class Client {
public request(adapter: Adapter): string {
return adapter.request();
}
}
Das Bridge Pattern trennt die Abstraktion von der Implementierung, so dass beide unabhängig voneinander geändert werden können.
interface DeviceImplementor {
operationImp(): string;
}
class DeviceOne implements DeviceImplementor {
operationImp(): string {
return 'DeviceOne operation.';
}
}
class DeviceTwo implements DeviceImplementor {
operationImp(): string {
return 'DeviceTwo operation.';
}
}
abstract class Abstraction {
protected implementor: DeviceImplementor;
constructor(implementor: DeviceImplementor) {
this.implementor = implementor;
}
operation(): string {
return this.implementor.operationImp();
}
}
class RefinedAbstraction extends Abstraction {
operation(): string {
return `RefinedAbstraction: ${this.implementor.operationImp()}`;
}
}
const deviceOne = new DeviceOne();
const deviceTwo = new DeviceTwo();
const abstractionOne = new Abstraction(deviceOne);
const abstractionTwo = new RefinedAbstraction(deviceTwo);
abstractionOne.operation(); // DeviceOne operation.
abstractionTwo.operation(); // RefinedAbstraction: DeviceTwo operation.
TODO:
Beispiel
Das Composite Pattern ermöglicht es, Objekte in einer Baumstruktur zu behandeln, so dass einzelne Objekte und zusammengesetzte Objekte einheitlich und unabhängig voneinander behandelt werden können.
Das Decorator Pattern ermöglicht es, Objekte dynamisch um zusätzliche Funktionalität zu erweitern, ohne die Objekte selbst zu ändern.
TODO:
Beispiel
Das Facade Pattern bietet eine vereinfachte Schnittstelle zu einem komplexen Subsystem (Library, Framework, etc.).
TODO:
Beispiel
Das Flyweight Pattern wird verwendet, um die Anzahl der Objekte zu reduzieren und den Speicherbedarf zu verringern, indem gemeinsam genutzte Daten zwischen mehreren Objekten geteilt werden.
Das Proxy Pattern wird verwendet, um den Zugriff auf ein Objekt zu kontrollieren, indem ein Proxyobjekt erstellt wird, das als Stellvertreter für das eigentliche Objekt fungiert. Alle Aufrufe an das Proxyobjekt werden an das eigentliche Objekt weitergeleitet, wobei der Proxy zusätzliche Funktionalität vor oder nach dem Aufruf des originalen Objekts bereitstellen kann.