意图
使得两个部分可以互相通讯或者使用,将抽象部分与它的实现部分分离,使它们都可以独立地变化。
所以说他们两个部分是独立的,没有实现自同一个接口,这是桥接模式与代理模式,装饰者模式的区别。
使用场景
- 你不希望在抽象和它的实现部分之间有一个固定的绑定关系。比如需要在程序运行时实现部分可以被选择或者切换。
- 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
- 一个类存在两个独立变化的维度,而这两个维度都需要进行扩展。
- 那些不希望使用继承或因为多层次继承导致系统类的个数极具增加的系统;
- 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以通过桥接模式使他们在抽象层建立一个关联关系;
效果
分离接口及其实现部分。
提高可扩充性。
实现细节对客户透明
UML
bridge.png代码示例
public interface Implementor {
void operationImpl();
}
public class ConcreteImplementorA implements Implementor{
@Override
public void operationImpl() {
//具体实现
}
}
public class ConcreteImplementorB implements Implementor{
@Override
public void operationImpl() {
//具体实现
}
}
public abstract class Abstraction {
private Implementor implementor;
public Abstraction(Implementor implementor) {
this.implementor = implementor;
}
public void operation() {
implementor.operationImpl();
}
}
public class RefinedAbs extends Abstraction{
public RefinedAbstraction(Implementor implementor) {
super(implementor);
}
public void refinedOperation() {
//对 Abstraction 中的 operation 方法进行扩展
}
}
网友评论