一、定义:
桥接模式将抽象部分与它的实现部分解耦,使得两者都能独立变化。
说明:桥接模式用一种巧妙的方式处理多层继承存在的问题,用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,提高系统的灵活性,易于扩展,有效控制系统中类的个数。
桥接模式又称为柄体模式或接口模式。
二、桥接模式的结构
桥接模式包含四个部分:
1)抽象类(Abstraction)
定义抽象类的接口,通常是抽象类而不是接口。在该类中定义了一个实现类接口类型的对象,并维护该对象,该类与实现接口类之间具有关联关系,既可以包含抽象业务方法,也可以包含具体业务方法。
2)扩充抽象类(RefinedAbstraction)
该类有Abstraction定义接口,通常情况下是抽象类而不是具体类,实现了在Abstraction中声明的抽象业务方法。
3) 实现类接口(Implementor)
定义实现类的接口,这个接口不一定要与Abstraction的接口完全一致,事实上着两个接口可以是完全一样的。通过关联关系,在Abstraction中不仅可以拥有自己的方法,还可以调用Implementor中定义的方法,使用关联关系来替代继承关系。
4) 具体实现类(ConcreteImplementor)
具体实现了实现类的接口,在不同的ConcreteImplementor中提供基本操作的不同实现,在程序运行时,具体实现类对象将替换其父类对象,提供给抽象类具体的业务操作方法。
三、桥接模式应用实例
开发一个跨平台图像浏览系统,要求系统能够现实BMP、JPG、GIF、PNG等多种格式的文件,并且能够在Windows,Linux,UNIX等多种操作系统上运行。
其中包含的类有:抽象类:Image;抽象类的子类BMPImage、JPGImage、GIFImage、PNGImage充当抽象扩充类;ImageImp充当实现类接口,其子类WindowsImp、LinuxImp和UnixImp充当具体实现类。四、桥接模式与适配器模式联用
1)适配器模式通常用于现有系统与第三方产品功能的集成,采用增加适配器的第三方类集成到系统中。桥接模式则不同,用户可以通过接口继承或类继承的方式对系统进行扩展。
2)二者用于不同的设计阶段,桥接模式用于系统的初步设计,对于存在两个独立变化的纬度可以将其分为抽象化和实现化两个角色。然而在初步设计完成之后,当发现系统与已有类无法协同工作时,则用适配器模式。
五、桥接模式的优点
1)分离抽象接口与实现部分;
2)桥接模式可以取代多层继承方案,极大的减少了子类的数量;
3)提高了系统的可扩展性。