Java设计模式(13)——结构型模式之桥梁模式(Bridge)
一、概述
概念
将抽象与实现脱耦,使得抽象和实现可以独立运行
UML图
角色:
角色关系
二、实践
按照上面的角色建立相应的类
抽象化角色
/**
* 抽象化角色
*
* @author Administrator
**/
public abstract class Abstraction {
protected Implenmentor impl;
public void operation() {
impl.operationImpl();
}
}
修正抽象角色
/**
* 修正抽象角色
*
* @author Administrator
**/
public class RefinedAbstraction extends Abstraction{
@Override
public void operation() {
// 修正逻辑
System.out.println("修正抽象角色");
}
}
实现化角色(接口形式)
/**
* 实现化角色
*
* @author Administrator
**/
public abstract class Implenmentor {
public abstract void operationImpl();
}
具体实现化角色(只给出一个示例,可以有多个具体实现)
/**
* 具体实现角色
*
* @author Administrator
**/
public class ConcreteImplenmentor extends Implenmentor{
@Override
public void operationImpl() {
// 子类重写逻辑
System.out.println("具体实现子类");
}
}
有了以上抽象角色的示例,我们再来看看《Java与模式》中的飞机制造的具体例子:
引入问题
常规思路如下:
联系最基本的检验原则,检查设计的问题
联系本节桥梁模式,做出改进
抽象角色
/**
* 飞机类抽象接口
*
* @author Administrator
**/
public abstract class Airplane {
protected AirplaneMaker airplaneMaker;
public abstract void fly();
}
修正角色
/**
* 载客飞机,作为飞机的修正角色
*
* @author Administrator
**/
public class PassengerAirplane extends Airplane{
@Override
public void fly() {
// 修正逻辑
System.out.println("修正角色");
}
}
/**
* 载货飞机,作为飞机的修正角色
*
* @author Administrator
**/
public class CargoPlane extends Airplane{
@Override
public void fly() {
// 修正逻辑
System.out.println("修正角色");
}
}
实现化角色
/**
* 飞机制造商接口
*
* @author Administrator
**/
public abstract class AirplaneMaker {
public abstract void produce();
}
具体实现化角色(此处省略另外的相似的角色)
/**
* 具体实现角色
*
* @author Administrator
**/
public class Airbus extends AirplaneMaker{
@Override
public void produce() {
// 具体实现逻辑
System.out.println("具体实现角色");
}
}
当然,可以参考更多的例子,参见:http://www.cnblogs.com/forlina/archive/2011/06/22/2087350.html
http://www.cnblogs.com/Coda/p/4289593.html
以上的例子都不要拘泥于形式,注意从UML图理解
三、改进与思考
使用场景
当一个类的子类需要扩展时,如果要在两个维度进行扩展,那么就可以使用Bridge模式。