Design patterns
Схема моста
Поиск…
Реализация моста в java
Мостовой шаблон отделяет абстракцию от реализации, так что оба могут варьироваться независимо друг от друга. Это было достигнуто с составом, а не с наследованием.
Диаграмма моста UML из Википедии:
У вас есть четыре компонента в этом шаблоне.
Abstraction : он определяет интерфейс
RefinedAbstraction : он реализует абстракцию:
Implementor : он определяет интерфейс для реализации
ConcreteImplementor : он реализует интерфейс Implementor.
The crux of Bridge pattern : две ортогональные иерархии классов с использованием композиции (и без наследования). Иерархия абстракции и иерархия реализации могут варьироваться независимо. Внедрение никогда не ссылается на абстракцию. Абстракция содержит интерфейс реализации в качестве члена (через композицию). Эта композиция снижает еще один уровень иерархии наследования.
Настоящее слово Случай использования:
Включите различные транспортные средства, чтобы иметь обе версии ручной и автоматической системы передач.
Пример кода:
/* 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();
}
}
выход:
Car handles Manual gear
Car handles Auto gear
Truck handles Manual gear
Truck handles Auto gear
Объяснение:
-
Vehicle- это абстракция. -
CarиTruck- это две конкретные реализацииVehicle. -
Vehicleопределяет абстрактный метод:addGear(). -
Gear- интерфейс реализации -
ManualGearиAutoGear- это две реализацииGear -
Vehicleсодержитimplementorинтерфейс , а не реализации интерфейса.Compositonинтерфейса реализации является ключевым в этом шаблоне: он позволяет абстракции и реализации меняться независимо друг от друга. -
CarиTruckопределяют реализацию (переопределены абстракции) для абстракции:addGear(): Он содержитGear- либоManualилиAuto
Используйте случай (ы) для шаблона Bridge :
- Абстракция и реализация могут изменяться независимо друг от друга, и они не связаны во время компиляции
- Карта ортогональных иерархий - одна для абстракции и одна для реализации .
