设计模式之桥接模式

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

适用场景

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

优点

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

缺点

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

UML结构图

 
670317-d808cf602574ce50.png
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();

    }

}

设计模式系列:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值