Design patterns
Modello di ponte
Ricerca…
Implementazione del pattern bridge in java
Il pattern del bridge disaccoppia l'astrazione dall'implementazione in modo che entrambi possano variare in modo indipendente. È stato realizzato con la composizione piuttosto che con l'eredità.
Diagramma UML di Bridge da wikipedia:
Hai quattro componenti in questo modello.
Abstraction
: definisce un'interfaccia
RefinedAbstraction
astrazione: implementa l'astrazione:
Implementor
: definisce un'interfaccia per l'implementazione
ConcreteImplementor
: implementa l'interfaccia Implementor.
The crux of Bridge pattern :
due gerarchie di classi ortogonali che utilizzano la composizione (e nessuna ereditarietà). La gerarchia di astrazione e la gerarchia di implementazione possono variare in modo indipendente. L'implementazione non fa mai riferimento all'astrazione. L'astrazione contiene l'interfaccia di implementazione come membro (attraverso la composizione). Questa composizione riduce un ulteriore livello di gerarchia dell'ereditarietà.
Caso di utilizzo di parole reali:
Abilitare diversi veicoli per avere entrambe le versioni del sistema di cambio manuale e automatico.
Codice di esempio:
/* 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();
}
}
produzione:
Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear
Spiegazione:
-
Vehicle
è un'astrazione. -
Car
eTruck
sono due implementazioni concrete delVehicle
. -
Vehicle
definisce un metodo astratto:addGear()
. -
Gear
è un'interfaccia implementatore -
ManualGear
eAutoGear
sono due implementazioni diGear
-
Vehicle
contiene un'interfacciaimplementor
piuttosto che l'implementazione dell'interfaccia.Compositon
of implementor interface è un punto cruciale di questo modello: consente all'astrazione e all'implementazione di variare in modo indipendente. -
Car
andTruck
definisce l'implementazione (astrazione ridefinita) per l'astrazione:addGear()
: contieneGear
-Manual
oAuto
Utilizzare il / i case / i per il modello Bridge :
- L'astrazione e l' implementazione possono cambiare indipendentemente l'una dall'altra e non sono vincolate al momento della compilazione
- Mappa gerarchie ortogonali - Una per l' astrazione e una per l' implementazione .