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 :
- Абстракция и реализация могут изменяться независимо друг от друга, и они не связаны во время компиляции
- Карта ортогональных иерархий - одна для абстракции и одна для реализации .