桥接模式
定义
桥接模式是抽象的部分和它实现的部分分离,使得它们可以独立地变化,它是一种对象结构型模式。
案例
描述
电脑产品可以分为笔记本电脑,台式电脑和平板电脑。然后笔记本电脑根据品牌,可以分为苹果电脑,华为电脑,小米电脑。对台式电脑和平板电脑也是如此。
需求变动
1、需要新加入一个品牌
如果要新加入一个品牌,那么这个品牌对每个产品都进行生成,由此新增很多类
2、需要新加入一个产品
如果要新加入一个产品,那么这个产品也要被所有品牌实现,由此新增很多类
解决方式
这个场景中两个纬度的变化:品牌和电脑类型
可以通过组合的方式,组合出我们想要的产品和品牌
核心代码
/**
* 抽象类可以有成员变量
* 通过组合brand的方式实现
*/
public abstract class Computer {
private Brand brand;
public Computer(Brand brand) {
this.brand = brand;
}
public String info() {
return brand.info();
}
public abstract void introduce();
}
Comsumer类可以自己从两个纬度组合代码
public static void main(String[] args) {
new Notebook(new AppleBrand()).introduce();
new Desktop(new XiaoMiBrand()).introduce();
new Tablet(new HuaweiBrand()).introduce();
}
UML图
关键
通过抽象类computer来组合接口Brand
优劣
优势
- 桥接模式偶尔类似于多继承的方式,但是多继承方案违背了类的单一职责,复用性比较差,类的个数也比较多。桥接模式是比多继承更好的解决方案,极大的减少了子类的个数,从而降低了管理成本和维护成本。
- 桥接模式提高了任务的可扩充性,在两个变化纬度中任意扩展一个纬度,都不需要修改原有系统。符合开闭原则,就像一座桥,把多个纬度连接了起来。
劣势
- 桥接模式的引入会增加系统的理解和设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计和编程。
- 桥接模式要求正确识别出系统中的两个独立变化的纬度,因此其使用范围具有一定的局限性。