二、11【设计模式】之桥接模式

今天的博客主题

       设计模式 ——》 设计模式之桥接模式


桥接模式 BP (Bridge Pattern)

 

定义

将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。

主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多重继承方案,但是多重继承往往违背了类的单一职责,复用性比较差。

桥接模式的核心在于解耦抽象和实现。

 

桥接模式是一个非常有用的模式,在桥接模式中体现了很多面向对象设计原则的思想,包括“单一职责原则”、“开闭原则”、“合成复用原则”、“里氏代换原则”、“依赖倒转原则”等。熟悉桥接模式有助于我们深入理解这些设计原则,也有助于我们形成正确的设计思想和培养良好的设计风格。

 

应用场景

当一个类内部具备两种以上变化维度时,使用桥接模式可以解耦这些变化的维度,使高层架构代码更稳定。

1)在抽象和具体实现之间需要增加更多的灵活性场景。

2)一个类存在两个或多个独立变化的维度,而且还都需要独立的进行扩展。

3)不希望使用继承,或因为多层继承导致系统类的个数剧增。

4)

 

优点

1)分离抽象部分及具体实现部分

2)提高系统的扩展性

3)符合开闭原则

4)符合合成复用原则

5)

 

缺点

1)增加系统的理解与设计难度

2)需要正确的识别系统中两个独立变化的维度

3)

 

源码中的应用

JDBC API: DriverManager

 

代码示例

桥接模式主要包含四种角色

抽象角色(abstraction):持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象)

修正抽象角色(RefinedAbstraction):abstraction 的具体实现,对 abstraction 方法进行完善扩展。

实现角色(Implementor):确定实现维度的基本操作,提供给 abstraction 使用。该类一般为接口或者抽象类。

具体实现角色(ConcreteImplementor):Implementor 的具体实现。

 

// 抽象角色
abstract class Abstraction{

    Implementor implementor;

    public Abstraction(Implementor implementor){
        this.implementor = implementor;
    }

    public void operation(){
        this.implementor.operationImpl();
    }
}

// 修正抽象角色
class RefinedAbstraction extends Abstraction{

    public RefinedAbstraction(Implementor implementor) {
        super(implementor);
    }

    @Override
    public void operation() {
        super.operation();
        System.out.println("refined operation");
    }
}

// 实现角色
interface Implementor{
    void operationImpl();
}

// 具体实现角色
class ConcreteImplementorA implements Implementor{

    @Override
    public void operationImpl() {
        System.out.println("I`M ConcreteImpl A");
    }
}

// 客户端调用
public class BridgePattern {

    public static void main(String[] args) {
        // 具体实现角色
        Implementor impl = new ConcreteImplementorA();
        // 抽象角色,聚合实现
        Abstraction abst = new RefinedAbstraction(impl);
        // 操作
        abst.operation();
    }
}

// 输出结果
I`M ConcreteImpl A
refined operation

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值