来源:http://blog.csdn.net/shift_wwx/article/details/79202510
一、定义
桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。
使用场景:
- 一个类存在两个独立维度的变化,且两个维度都需要进行拓展。
- 一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免两个层次之间建立静态的继承联系,可以用桥接模式使他们在抽象层建立一个关联关系。
- 不想使用继承或使用继承会导致生成一大堆类的时候。
二、结构
- 抽象化(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用。
- 修正抽象化(RefinedAbstraction)角色:扩展抽象化角色,改变和修正父类对抽象化的定义。
- 实现化(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际上,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作。
- 具体实现化(ConcreteImplementor)角色:这个角色给出实现化角色接口的具体实现。
抽象化角色就像是一个水杯的手柄,而实现化角色和具体实现化角色就像是水杯的杯身。手柄控制杯身,这就是此模式别名“柄体”的来源。
对象是对行为的封装,而行为是由方法实现的。在这个示意性系统里,抽象化等级结构中的类封装了operation()方法;而实现化等级结构中的类封装的是operationImpl()方法。当然,在实际的系统中往往会有多于一个的方法。
抽象化等级结构中的方法通过向对应的实现化对象的委派实现自己的功能,这意味着抽象化角色可以通过向不同的实现化对象委派,来达到动态地转换自己的功能的目的。
模板代码:
//抽象化代码
public abstract class Abstraction {
protected Implementor impl;
public Abstraction(Implementor impl){
this.impl = impl;
}
//示例方法
public void operation(){
impl.operationImpl();
}
}
//修正抽象化代码
public class RefinedAbstraction extends Abstraction {
public RefinedAbstraction(Implementor impl) {
super(impl);
}
//其他的操作方法
public void otherOperation(){
//默认实现
}
}
//实现化代码
public abstract class Implementor {
/**
* 示例方法,实现抽象部分需要的某些具体功能
*/
public abstract void operationImpl();
}
//具体实例化代码
public class ConcreteImplementorA extends Implementor {
@Override
public void operationImpl() {
//具体操作
}
}
//具体实例化代码
public class ConcreteImplementorB extends Implementor {
@Override
public void operationImpl() {
//具体操作
}
}
桥接模式就是把系统分为抽象部分和实现部分,而建立桥接的方式也很简单。就是让抽象部分持有实现部分的引用,可以通过这个引用调用实现部分的具体方法。
使用这个系统最重要的是把握系统的分离,分不好就失去了灵活的拓展性,因此不容易设计。
优点
分离成抽象部分和实现部分,并且两部分都可以独立的拓展,一个部分变化不会引起另一部分的变化,提高了系统的拓展性。
复用性强,避免了使用继承产生大量继承类的问题。
缺点
将系统分离为抽象部分和实现部分,会增加系统的复杂度和设计难度。如果系统不能分离出两个独立的维度的话,就不适合使用这个模式。
更多的设计模式看:Android中设计模式
参考:
https://www.jianshu.com/p/c656132a6b74
http://www.cnblogs.com/java-my-life/archive/2012/05/07/2480938.html