介绍
Bridge模式 桥接模式
构造型之一(结构型之一)
基于类的最小设计原则,通过使用封装,聚合以及继承等行为来让不同的类承担不同的责任,他的主要特点:
- 是把抽象与行为实现分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展
应用场景
- 当数据结构和数据行为有多种组合情况时,可以使用桥接模式:把数据结构和其行为分离定义,然后数据结构维护数据行为的抽象引用,使用时根据实际需要行为进行执行
- 体现的是高内聚低耦合的思想
角色与职责
Client
:使用者Abstraction
抽象类接口,维护对行为实现(Implementor
)的引用Refined Abstraction
:Abstraction
的子类Implementor
:行为实现类接口,定义操作ConcreteImplementor
:Implementor
子类
结构图
代码实现
-
Implementor
/** * 角色:Implementor */ public interface Engine { public void installEngine(); }
-
ConcreteImplementor
/** * 角色:ConcreteImplementor */ public class Engine200 implements Engine{ @Override public void installEngine() { System.out.println("安装200cc的引擎"); } }
/** * 角色:ConcreteImplementor */ public class Engine300 implements Engine{ @Override public void installEngine() { System.out.println("安装300cc的引擎"); } }
-
Abstraction
/** * 角色:Abstraction */ public abstract class Car { private Engine engine; public Car(Engine engine) { this.engine = engine; } public Engine getEngine() { return engine; } public abstract void installEngine(); }
-
Refined Abstraction
/** * 角色:Refined Abstraction */ public class BusCar extends Car{ public BusCar(Engine engine) { super(engine); } @Override public void installEngine() { System.out.println("BusCar:"); this.getEngine().installEngine(); } }
/** * 角色:Refined Abstraction */ public class JeepCar extends Car{ public JeepCar(Engine engine) { super(engine); } @Override public void installEngine() { System.out.println("JeepCar:"); this.getEngine().installEngine(); } }
-
Client
/** * Client */ public class ClientTest { public static void main(String[] args) { // 制作发动机 Engine engine200 = new Engine200(); Engine engine300 = new Engine300(); // 制作bus车 Car bus1 = new BusCar(engine200); bus1.installEngine(); Car bus2 = new BusCar(engine300); bus2.installEngine(); // 制作jeep车 Car jeep1 = new JeepCar(engine200); jeep1.installEngine(); Car jeep2 = new JeepCar(engine300); jeep2.installEngine(); } }
-
输出
BusCar: 安装200cc的引擎 BusCar: 安装300cc的引擎 JeepCar: 安装200cc的引擎 JeepCar: 安装300cc的引擎