前言
桥梁模式是对象的结构模式。又称为柄体(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();
}
}