设计模式之桥接模式

桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控制的庞然大物。

适用场景

  1. 当一个对象有多个变化因素的时候,通过抽象这些变化因素,将依赖具体实现,修改为依赖抽象。
  2. 当某个变化因素在多个对象中共享时。我们可以抽象出这个变化因素,然后实现这些不同的变化因素。
  3. 当我们期望一个对象的多个变化因素可以动态的变化,而且不影响客户的程序的使用时。

优点

  1. 分离抽象和实现部分
  2. 更好的扩展性
  3. 可动态地切换实现
  4. 可减少子类的个数

缺点

  1. 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
  2. 桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性。

UML结构图

BridgePattern

源码

Implementor:实现接口

/**
 * 实现接口
 *
 * Created by zhenguo on 12/8/14.
 */
public interface Implementor {

    public void operation();

}

ConcreteImplementorA:实现派生类A

/**
 * 实现派生类A
 *
 * Created by zhenguo on 12/8/14.
 */
public class ConcreteImplementorA implements Implementor {
    @Override
    public void operation() {
        System.out.println("具体实现A的方法执行");
    }
}

ConcreteImplementorB:实现派生类B

/**
 * 实现派生类B
 *
 * Created by zhenguo on 12/8/14.
 */
public class ConcreteImplementorB implements Implementor {
    @Override
    public void operation() {
        System.out.println("具体实现B的方法执行");
    }
}

Abstraction:抽象类

/**
 * 抽象类
 *
 * Created by zhenguo on 12/8/14.
 */
public abstract class Abstraction {

    protected Implementor implementor;

    public void setImplementor(Implementor implementor) {
        this.implementor = implementor;
    }

    public abstract void operation();

}

RefinedAbstraction:抽象实现子类

/**
 * 抽象实现子类
 *
 * Created by zhenguo on 12/8/14.
 */
public class RefinedAbstraction extends Abstraction {
    @Override
    public void operation() {
        if (implementor != null) {
            implementor.operation();
        }
    }
}

Client:客户端调用

/**
 * 客户端调用
 * 桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。
 *
 * Created by zhenguo on 12/8/14.
 */
public class Client {

    public static void main(String[] args) {
        Abstraction abstraction = new RefinedAbstraction();

        abstraction.setImplementor(new ConcreteImplementorA());
        abstraction.operation();

        abstraction.setImplementor(new ConcreteImplementorB());
        abstraction.operation();

    }

}

设计模式系列:

创建型 结构型 行为型
工厂方法
简单工厂
抽象工厂
建造者模式
单例模式
原型模式
组合模式
外观模式
桥接模式
代理模式
享元模式
适配器模式
装饰模式
策略模式
模板方法
状态模式
观察者模式
备忘录模式
迭代器模式
命令模式
职责链模式
解释器模式
访问者模式
中介者模式
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 意图 将抽象部分与它的实现部分分离,使它们都可以独立地变化。 【GOF95】在提出桥梁模式的时候指出,桥梁模...
    CrixalisAs阅读 2,532评论 0 0
  • 1 场景问题# 1.1 发送提示消息## 考虑这样一个实际的业务功能:发送提示消息。基本上所有带业务流程处理的系统...
    七寸知架构阅读 10,494评论 5 63
  • 桥接模式 定义 将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Hand...
    晨鸣code阅读 5,339评论 2 3
  • 说好的约定在野菊开时 你不来 我心中的野菊未开 季节停留在浓稠的树枝 我数着树叶的光阴 秋风才刚刚起步 野菊的枝在...
    淡然li阅读 3,532评论 23 34
  • ​今天给大家发的这些词汇那就厉害了! 这些词被贴上了文化的标签,只有知识很丰富的孩子才会用它!!所以,筒志们多学学...
    德迩德语阅读 1,781评论 0 1