目录
前言
桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者独立的变化”。
一、了解桥梁模式
1.桥梁模式的用意
桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者独立的变化”。这句话很短,这句话有三个关键词,也就是抽象化、实现化和脱耦。理解这三个词所代表的概念是理解桥梁模式用意的关键。
- 从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征,就是抽象化。
- 抽象化给出的具体实现,就是实现化。一个类的实例就是这个类的实例化,一个具体子类就是它的抽象超类的实例化。
- 两个实体的行为的有某种强关联。将它们的强关联去掉,就是耦合的脱耦。在这里,脱耦是指将抽象化和实例化之间的耦合解脱开,或者是将它们之间的强关联改成弱关联。
2.桥梁模式的优点
- 分离抽象部分和实现部分
桥梁模式分离了抽象部分和实现部分,从而极大的提高了系统的灵活性。让抽象部分和实现部分独立出来,分别定义接口,这有助于对系统进行分层,从而产生更好的结构化的系统。 - 更好的扩展性
桥梁模式使得抽象部分和实现部分可以分别独立的扩展,而不会相互影响,从而大大提高了系统的可扩展性
3.桥梁模式在Java中的使用
桥梁模式在Java应用中一个非常典型的例子就是JDBC驱动器。JDBC为所有的关系型数据库提供一个通用的界面。一个应用系统动态的选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令。这个过程就是将抽象角色的行为委派给实现角色的过程。
JDBC这种架构,把抽象部分和具体实现部分分离开来,从而使得抽象部分和具体实现部分都可以独立的扩展。对于应用程序而言,之遥选用不同的驱动,就可以让程序操作不同的数据库,而无需更改应用程序,从而实现在不同的数据库上移植;对于驱动程序而言,为数据库实现不同的驱动程序,并不会影响应用程序。
二、桥梁模式的例子(飞机信息系统)
首先Airplane扮演抽象化角色,它声明出所有修正抽象化角色所需的接口
抽象类代码Airplane(飞机)
public abstract class Airplane { public abstract void fly(); AirplaneMaker airplaneMaker; }
实现类代码
AirplaneMaker
abstract public class AirplaneMaker{ abstract public void produce(); }
修正抽象类代码
空客机 Airbus
public class Airbus extends AirplaneMaker { public void produce(){ System.out.println("制造商:Airbus!"); } }
波音Boeing
public class Boeing extends AirplaneMaker{ public void produce(){ System.out.println("制造商:Boeing!"); } }
麦道MD
public class MD extends AirplaneMaker{ public void produce(){ System.out.println("制造商:MD!"); } }
具体实现类代码
货机 CargoPlane
public class CargoPlane extends Airplane{ public void fly(){ System.out.println("飞机类型:载货飞机!"); } }
客机 PassengerPlane
public class PassengerPlane extends Airplane { public void fly(){ System.out.println("飞机类型:载客飞机!"); } }
测试程序
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub AirplaneMaker mk=new Airbus(); AirplaneMaker boe=new Boeing(); AirplaneMaker md=new MD(); Airplane lx=new CargoPlane(); Airplane lx1=new PassengerPlane(); mk.produce(); boe.produce(); md.produce(); lx.fly(); lx1.fly(); } }
运行结果