将抽象部分与实现部分分离,使得她们两个部分可以独立的变化。
抽象类(Abstraction):定义抽象类的接口,维护一个Implementor(实现抽象类)的对象。
扩充抽象类(RefinedAbstraction):扩充由Abstraction定义的接口。
实现类接口(Implentor):定义实现类的接口,着个借口不一定要与Abstraction的接口完全一致,事实上这两个接口可以完全不同,一般来讲,Implementor接口仅提供基本操作,而Abstraction定义的接口肯呢个会做更多更复杂的操作。
具体实现类(ConnreteImplementor):实现Implementor接口并且具体实现它。
范例:1.男人的约会一定会有个女人,但约会的地点有女人提出,这样的地点会因为所约的女人不同而变化,
2.假设我们开发一个图像观察软件,可以再windows下查看BMP图像格式,同时我们有扩展它的功能,可以再windows下查看JPEG,GIF,也可以在Linux查看这些图像格式。如果我们采用桥接模式,就会把抽象于实现分开。
优势和缺陷:
桥接模式可以从接口分离实现功能,使得设计更具有扩展性,这样,客户调用方法是根本不需要知道实现的细节。桥接默哀是减少了子类,如果程序中要在2个操作系统中实现查看6种图像格式,那么就会有2*6个类。使用桥接模式时候就会变成2+6个类了,,它使代码变得更清洁了,生成的执行程序更小了。但是桥接模式的缺陷是抽象类与实现类的双向连接使得运行速度更慢了。
应用情景:
1. 你想避免抽象方法和其实现方法绑定在一起。
2. 抽象接口和它的实现都需要扩展出子类以备使用
3. 变动实现的方法根本不会影响客户程序调用的部分(甚至不用重新编译)。