1、简介
桥接模式(Bridge pattern)是一种结构型设计模式,它将抽象部分与它的实现部分分离,使它们都可以独立地变化。从而增加了系统的灵活性和可扩展性。
桥接模式通常用于解决两个相互依存的类之间的耦合关系。
它通过创建一个抽象类或者接口来封装抽象部分,另外再创建一个实现类来封装实现部分,然后将这两部分通过组合的方式结合起来。
在桥接模式中,一般有两类角色:
①抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
②实现化(Implementor)角色:定义实现化对象,供抽象化角色调用。
2、帮助理解
举个例子,假设你想要制造汽车,汽车有两个重要的部分,汽车的品牌和汽车的颜色,你可以在制造汽车时先选择品牌,再选择颜色,这样你就可以得到一辆品牌为XX,颜色为YY的汽车。而使用桥接模式,则可以将品牌和颜色分开来考虑,使得品牌和颜色可以独立变化,从而得到更多的组合。
3、优缺点
桥接模式的优点是:
①分离抽象部分和实现部分,使得它们可以独立变化
②桥接模式提高了系统的扩展性
③实现细节对客户透明,可以对用户隐藏实现细节
缺点是:
①桥接模式会增加系统的理解与设计难度,需要具备较高的技能
②桥接模式会增加系统的复杂度,因为每个抽象部分都需要一个独立的实现部分
③通常来说,桥接模式适用于在多个维度变化的系统中使用。
4、使用场景
两个独立变化的维度都需要进行扩展,且这两个维度可能会相互影响。
桥接模式可以将这两个维度分离开来,使得它们可以独立变化。
在一个类层次结构中,希望多个子类中共享一些公共的行为,且该公共行为可能需要在子类中进行扩展。
当一个类的抽象和它的实现都应该可以扩展的时候,将它们分离出来,使用桥接模式。
当一个对象存在多个维度变化的时候,使用桥接模式可以将这些维度的变化解耦。
5、代码实现
①首先定义一个抽象类,该类中包含一个指向另一个抽象类的引用。该抽象类可以是接口或抽象类。
②然后定义具体的实现类,它们继承抽象类并实现其抽象方法。
③最后,定义实现类,它实现了抽象类中的接口。
④在使用时,我们可以通过创建不同的实现类来改变具体的实现方式,而不需要改变抽象类的代码。
总结如上步骤如下:
- 定义一个抽象类或接口,表示需要实现的功能->画图形Shape,即抽象部分。
- 定义一个抽象类或接口,表示实现的方式,即实现部分->Circle extends Shape。
- 创建一个实现类,继承或实现抽象部分和实现部分 ->具体实现的东西:RedCircle implements DrawAPI
- 使用实现类对象调用抽象部分的方法,实现对实现部分的操作->Shape redCircle=new Circle(参数)
5.1、图解