Java设计模式架构算法设计模式和编程理论设计模式

设计模式之桥接模式

2018-02-22  本文已影响2747人  爱红旗渠

桥接模式(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();

    }

}

设计模式系列:

创建型 结构型 行为型
工厂方法
简单工厂
抽象工厂
建造者模式
单例模式
原型模式
组合模式
外观模式
桥接模式
代理模式
享元模式
适配器模式
装饰模式
策略模式
模板方法
状态模式
观察者模式
备忘录模式
迭代器模式
命令模式
职责链模式
解释器模式
访问者模式
中介者模式
上一篇 下一篇

猜你喜欢

热点阅读