读书人

设计方式之 Bridge - 桥接模式

发布时间: 2012-11-14 10:12:18 作者: rapoo

设计模式之 Bridge - 桥接模式
Bridge模式也叫桥接模式,是由GoF提出的23种软件设计模式的一种。Bridge模式在调用方与被调用方之间使用一个起着“桥”作用的类,用来支持类的多方向扩展。
本文介绍设计模式中的桥接(Bridge)模式的概念,用法,以及实际应用中怎么样使用桥接模式进行开发。

[图:出自wikipedia.org]

Client
????Bridge模式的使用者
Abstraction
????抽象类接口(接口或抽象类)
????维护对行为实现(Implementor)的引用
Refined Abstraction
????Abstraction子类
Implementor
????行为实现类接口 (Abstraction接口定义了基于Implementor接口的更高层次的操作)
ConcreteImplementor
????Implementor子类


package zieckey.designpatterns.study.bridge;

//测试

public class Client
{
????public static void main( String[] argv )
????{
????????Engine engine1500 = new Engine1500CC();
????????Engine engine2200 = new Engine2200CC();
????????
????????Vehicle bus1500 = new Bus( engine1500 );
????????Vehicle bus2200 = new Bus( engine2200 );
????????bus1500.setEngine();
????????bus2200.setEngine();
????????
????????Vehicle truck1500 = new Truck( engine1500 );
????????Vehicle truck2200 = new Truck( engine2200 );
????????truck1500.setEngine();
????????truck2200.setEngine();
????}
}




package zieckey.designpatterns.study.bridge;

/**
?*
?* 汽车类(Vehicle),假设有2个子类,卡车类(Truck)与公交车类(Bus),
?* 它们有[设置引擎]这个动作行为,通过不同引擎规格的设置,
?* 可以将它们设置为比如为1500cc(Car1500),和2000cc(Car2000)的车。
?* 这样,不管是1500cc的卡车还是2000cc的卡车,抑或是1500cc的公交车还是2000cc的公交车,它们都可以是汽车类的子类,而且:
?* ????- 存在相对并列的子类属性。汽车的种类,与汽车引擎规格是汽车的2个并列的属性,没有概念上的重复。
?* ????- 存在概念上的交叉。不管是卡车还是公交车,都有1500cc与2000cc引擎规格的车。
?* ????- 可变性。除了卡车,公交车之外,可能还有救火车;除了有1500cc与2000cc引擎规格的车之外,还可能有2500cc的车等等。
?*
?* @author zieckey
?* @since 2008/06/23
?*/
public abstract class Vehicle
{
????private Engine engine;
????Vehicle( Engine engine )
????{
????????this.setEngine( engine );
????}
????
????public abstract void setEngine();

????public void setEngine( Engine engine )
????{
????????this.engine = engine;
????}

????public Engine getEngine()
????{
????????return engine;
????}
}






package zieckey.designpatterns.study.bridge;

//Abstraction子类:这里为汽车抽象类的子类

public class Bus extends Vehicle
{
????public Bus( Engine engine)
????{
????????super( engine );
????}
????
????@Override
????public void setEngine()
????{
????????System.out.print("Set Bus Engine: ");
????????getEngine().setEngine();
????}
}





package zieckey.designpatterns.study.bridge;

//Abstraction子类:这里为汽车抽象类的子类

public class Truck extends Vehicle
{
????public Truck( Engine engine )
????{
????????super( engine );
????}

????@Override
????public void setEngine()
????{
????????System.out.print("Set Truck Engine: ");
????????getEngine().setEngine();
????}

}





package zieckey.designpatterns.study.bridge;


//汽车类的行为接口

public interface Engine
{
????public void setEngine();
}




package zieckey.designpatterns.study.bridge;

/** ConcreteImplementor */
//行为实现子类

public class Engine2200CC implements Engine
{

????public void setEngine()
????{
????????System.out.println("engine 2200CC");
????}????
????
}




package zieckey.designpatterns.study.bridge;

/** ConcreteImplementor */
//行为实现子类

public class Engine1500CC implements Engine
{

????public void setEngine()
????{
????????System.out.println("engine 1500CC");
????}????
????
}


输出:

Set Bus Engine: engine 1500CC
Set Bus Engine: engine 2200CC
Set Truck Engine: engine 1500CC
Set Truck Engine: engine 2200CC

读书人网 >软件开发

热点推荐