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:
-
Vehicleist eine Abstraktion. -
CarundTrucksind zwei konkrete Implementierungen vonVehicle. -
Vehicledefiniert eine abstrakte Methode:addGear(). -
Gearist Implementierer-Schnittstelle -
ManualGearundAutoGearsind zwei Implementierungen vonGear -
VehicleenthältimplementorSchnittstelle, anstatt die Schnittstelle zu implementieren.Compositonder Implementierer-Schnittstelle ist das Kernstück dieses Musters: Sie ermöglicht die Abstraktion und Implementierung unabhängig voneinander. -
CarundTruckdefinieren die Implementierung (neu definierte Abstraktion) für die Abstraktion:addGear(): Sie enthältGear- entwederManualoderAuto
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 .
