Design patterns
Brückenmuster
Suche…
Brückenmuster-Implementierung in Java
Brückenmuster entkoppelt die Abstraktion von der Implementierung, sodass beide unabhängig voneinander variieren können. Es wurde eher durch Komposition als durch Vererbung erreicht.
Bridge-UML-Diagramm aus Wikipedia:
Sie haben vier Komponenten in diesem Muster.
Abstraction
: Es definiert eine Schnittstelle
RefinedAbstraction
: Es implementiert Abstraktion:
Implementor
: Definiert eine Schnittstelle für die Implementierung
ConcreteImplementor
: Implementiert die Implementor-Schnittstelle.
The crux of Bridge pattern :
Zwei orthogonale Klassenhierarchien mit Komposition (und ohne Vererbung). Die Abstraktionshierarchie und die Implementierungshierarchie können unabhängig voneinander variieren. Die Implementierung bezieht sich niemals auf Abstraktion. Die Abstraktion enthält eine Implementierungsschnittstelle als Mitglied (durch Komposition). Diese Zusammensetzung reduziert eine weitere Vererbungshierarchieebene.
Echtes Wort Anwendungsfall:
Ermöglichen Sie, dass verschiedene Fahrzeuge sowohl manuelle als auch automatische Gangschaltung haben.
Beispielcode:
/* Implementor interface*/
interface Gear{
void handleGear();
}
/* Concrete Implementor - 1 */
class ManualGear implements Gear{
public void handleGear(){
System.out.println("Manual gear");
}
}
/* Concrete Implementor - 2 */
class AutoGear implements Gear{
public void handleGear(){
System.out.println("Auto gear");
}
}
/* Abstraction (abstract class) */
abstract class Vehicle {
Gear gear;
public Vehicle(Gear gear){
this.gear = gear;
}
abstract void addGear();
}
/* RefinedAbstraction - 1*/
class Car extends Vehicle{
public Car(Gear gear){
super(gear);
// initialize various other Car components to make the car
}
public void addGear(){
System.out.print("Car handles ");
gear.handleGear();
}
}
/* RefinedAbstraction - 2 */
class Truck extends Vehicle{
public Truck(Gear gear){
super(gear);
// initialize various other Truck components to make the car
}
public void addGear(){
System.out.print("Truck handles " );
gear.handleGear();
}
}
/* Client program */
public class BridgeDemo {
public static void main(String args[]){
Gear gear = new ManualGear();
Vehicle vehicle = new Car(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Car(gear);
vehicle.addGear();
gear = new ManualGear();
vehicle = new Truck(gear);
vehicle.addGear();
gear = new AutoGear();
vehicle = new Truck(gear);
vehicle.addGear();
}
}
Ausgabe:
Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear
Erläuterung:
-
Vehicle
ist eine Abstraktion. -
Car
undTruck
sind zwei konkrete Implementierungen vonVehicle
. -
Vehicle
definiert eine abstrakte Methode:addGear()
. -
Gear
ist Implementierer-Schnittstelle -
ManualGear
undAutoGear
sind zwei Implementierungen vonGear
-
Vehicle
enthältimplementor
Schnittstelle, anstatt die Schnittstelle zu implementieren.Compositon
der Implementierer-Schnittstelle ist das Kernstück dieses Musters: Sie ermöglicht die Abstraktion und Implementierung unabhängig voneinander. -
Car
undTruck
definieren die Implementierung (neu definierte Abstraktion) für die Abstraktion:addGear()
: Sie enthältGear
- entwederManual
oderAuto
Anwendungsfall (e) für Brückenmuster :
- Abstraktion und Implementierung können sich unabhängig voneinander ändern und sind zur Kompilierzeit nicht gebunden
- Kartieren Sie orthogonale Hierarchien - eine für die Abstraktion und eine für die Implementierung .