1. 桥接模式
1.1 定义
桥接是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式设计到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
1.2 介绍
这种模式主要为了解决在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活
。主要的实现就是在抽象类和实现抽象类之间,加入接口,实现类将接口放到构造方法中实现,而具体的实现接口类可以通过实现抽象类中的构造方法new()出来,实现抽象化和实现化解耦。可以在实现系统可能有多个角度分类,每一种角度都可能变化
时使用。
桥接模式主要分为以下四种角色:
- 抽象(Abstraction)角色:定义抽象接口,拥有一个Implementor类型的对象的引用
- 扩展抽象(Refined Abstraction)角色:扩展Abstraction
- 抽象实现(Implementor)角色:定义实现类的接口
- 具体实现(Concrete Implementor)角色:实现Implementor接口,子类对象替换父类对象,提供给Abstraction具体的业务操作方法。
2. 代码实现
2.1. 抽象角色
//定义电子产品的抽象类
public abstract class Electron {
protected CreateApi createApi;
protected Electron(CreateApi createApi){
this.createApi = createApi;
}
public abstract void create();
}
2.2. 抽象实现角色
//定义手机类,继承电子产品
public class Phone extends Electron {
private String system;
public Phone(CreateApi createApi,String system ) {
super(createApi);
this.system = system;
}
public void create() {
createApi.createPhone(system);
}
}
2.3. 创建接口
//创建制造手机的接口
public interface CreateApi {
public void createPhone(String system);
}
2.4. 实现接口
//创建华为手机实现接口
public class HuaWeiPhone implements CreateApi{
@Override
public void createPhone(String system) {
System.out.println("HuaWeiPhone " + system);
}
}
//创建苹果手机实现接口
public class ApplePhone implements CreateApi {
@Override
public void createPhone(String system) {
System.out.println("ApplePhone " + system);
}
}
2.5. 测试类
public class BridgePatternDemo {
public static void main(String[] args) {
Electron huaWeiPhone = new Phone(new HuaWeiPhone(),"AndroidSystem");
Electron applePhone = new Phone(new ApplePhone(),"IOSSystem");
huaWeiPhone.create();
applePhone.create();
}
}
/**
* HuaWeiPhone AndroidSystem
* ApplePhone IOSSystem
*/
3. 优缺点
3.1 优点
- 抽象和实现的分离。
- 优秀的扩展能力。
- 实现细节对客户透明。
3.1 缺点
桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。