Brücken-Muster
Bridge-Muster wird verwendet, um Abstraktion von Implementierung zu entkoppeln, sodass beide unabhängig variieren können. Diese Art von Entwurfsmuster ist ein Strukturmuster, das die beiden entkoppelt, indem es eine Brückenstruktur zwischen Abstraktion und Implementierung bereitstellt.
Dieses Muster beinhaltet eine Schnittstelle, die als Brücke fungiert, sodass die Funktionalität von Entitätsklassen unabhängig von den Schnittstellen-Implementierungsklassen ist. Diese beiden Klassentypen können strukturell geändert werden, ohne sich gegenseitig zu beeinflussen.
Der Zweck des Bridge-Musters besteht darin, Abstraktion von Implementierung zu trennen, sodass sie unabhängig variieren können. Das Muster trennt den abstrakten Teil eines Objekts von seinem Implementierungsteil, wodurch sie sich unabhängig ändern können. Es verbindet die abstrakten und die Implementierungsteile durch Komposition statt durch Vererbung.
Wir verwenden das folgende Beispiel, um die Verwendung des Bridge-Musters zu demonstrieren. Hier können wir dieselben abstrakten Klassenmethoden, aber unterschiedliche Bridge-Implementierungsklassen verwenden, um Kreise in verschiedenen Farben zu zeichnen.
Einführung
Absicht
Dient dazu, den abstrakten Teil vom Implementierungsteil zu trennen, damit sie unabhängig voneinander variieren können.
Wesentliche gelöste Probleme
Vermeidet das durch Vererbung verursachte Problem der Klassenexplosion und bietet eine flexiblere Möglichkeit zur Erweiterung.
Anwendungsfall
Das Bridge-Muster eignet sich, wenn ein System aus mehreren Perspektiven klassifiziert werden kann und jede Perspektive unabhängig variieren kann.
Implementierungsansatz
- Trennung der Klassifizierung aus mehreren Blickwinkeln: Trennt die Klassifizierungslogik von verschiedenen Perspektiven, sodass sie unabhängig variieren können.
- Kopplung reduzieren: Reduziert die Kopplung zwischen Abstraktion und Implementierung.
Schlüsselcode
- Abstrakte Klasse: Definiert eine abstrakte Klasse als Teil des Systems.
- Implementierungsklasse: Definiert eine oder mehrere Implementierungsklassen, die über Aggregation (statt Vererbung) mit der abstrakten Klasse verbunden sind.
Anwendungsbeispiel
- Reinkarnation: Die Trennung von Seele (Abstraktion) und Körper (Implementierung), wodurch die Seele verschiedene Körper wählen kann.
- Wandschalter: Die Trennung von Schalter (Abstraktion) und interner Implementierung (Implementierung); Benutzer müssen sich nicht um die interne Funktionsweise des Schalters kümmern.
Vorteile
- Trennung von Abstraktion und Implementierung: Verbessert die Flexibilität und Wartbarkeit des Systems.
- Starke Erweiterbarkeit: Abstraktion und Implementierung können unabhängig voneinander erweitert werden.
- Transparente Implementierungsdetails: Benutzer müssen die Implementierungsdetails nicht verstehen.
Nachteile
- Schwierigkeit des Verständnisses und Designs: Das Bridge-Muster erhöht die Schwierigkeit, das System zu verstehen und zu entwerfen.
- Aggregations-Assoziation: Erfordert, dass Entwickler auf der Abstraktionsebene entwerfen und programmieren.
Verwendungshinweise
- Verwenden Sie das Bridge-Muster, wenn das System die Flexibilität zwischen der Abstraktionsrolle und der konkreten Rolle erhöhen muss.
- Das Bridge-Muster eignet sich besonders für Systeme, bei denen Vererbung unerwünscht ist oder bei denen mehrstufige Vererbung zu einem starken Anstieg der Anzahl von Klassen führt.
- Verwenden Sie das Bridge-Muster, wenn eine Klasse zwei unabhängig variierende Dimensionen hat und beide Dimensionen erweitert werden müssen.
Hinweise
- Das Bridge-Muster eignet sich für zwei unabhängig variierende Dimensionen und stellt sicher, dass sie unabhängig erweitert und geändert werden können.
Struktur
Das Folgende sind mehrere Schlüsselrollen des Bridge-Musters:
- Abstraktion: Definiert die abstrakte Schnittstelle, die normalerweise eine Referenz auf die Implementierungsschnittstelle enthält.
- Verfeinerte Abstraktion: Eine Erweiterung der Abstraktion, die eine Unterklasse der abstrakten Klasse oder eine konkrete Implementierungsklasse sein kann.
- Implementierer: Definiert die Implementierungsschnittstelle und stellt die Schnittstelle für grundlegende Operationen bereit.
- Konkreter Implementierer: Eine konkrete Klasse, die die Implementierungsschnittstelle implementiert.
Implementierung
Wir haben eine ... als die Brückenimplementierung.DrawAPISchnittstellen und ImplementierungenDrawAPIEntitätsklassen der SchnittstelleRedCircle、GreenCircle。Shapeist eine abstrakte Klasse, dieDrawAPIdas Objekt verwendet.BridgePatternDemoKlassenverwendungShapeKlasse zum Zeichnen von Kreisen in verschiedenen Farben.
Schritt 1
Erstellen Sie eine Schnittstelle für die Brückenimplementierung.
DrawAPI.java
Schritt 2
Erstellen Sie eine ImplementierungDrawAPIKonkrete Brückenimplementierungsklassen für die Schnittstelle.
RedCircle.java
GreenCircle.java
Schritt 3
VerwendungDrawAPIErstellen abstrakter Klassen aus SchnittstellenShape。
Shape.java
Schritt 4
Eine Implementierung erstellenShapeKonkrete Klassen der abstrakten Klasse.
Circle.java
Schritt 5
VerwendungShapeundDrawAPIDie Klasse zeichnet Kreise in verschiedenen Farben.
BridgePatternDemo.java
Schritt 6
Führen Sie das Programm aus, geben Sie die Ergebnisse aus:
Drawing Circle[ color: red, radius: 10, x: 100, 100] Drawing Circle[ color: green, radius: 10, x: 100, 100]
Empfehlungen zu verwandten Artikeln
Weitere Erweiterungen