Android 开发模式和优秀框架那些事

设计模式之十五——桥接模式

2019-07-01  本文已影响4人  dd299

原文传送门

1 介绍

桥接模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。

1.1 什么是桥接模式

桥接模式即将抽象部分与它的实现部分分离开来,使他们都可以独立变化。

桥接模式将继承关系转化成关联关系,它降低了类与类之间的耦合度,减少了系统中类的数量,也减少了代码量。

桥接模式的用意有三个关键词,也就是抽象化、实现化和脱耦。理解这三个词所代表的概念是理解桥接模式用意的关键。

1.2 解决了什么问题

有时候,实现系统可能有多个角度分类,每一种角度都可能变化。在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。这就是桥接模式试图解决的问题。

2 原理

2.1 uml图

桥接模式的示意性系统的结构图

抽象化角色就像是一个水杯的手柄,而实现化角色和具体实现化角色就像是水杯的杯身。手柄控制杯身,这就是此模式别名“柄体”的来源。

对象是对行为的封装,而行为是由方法实现的。在这个示意性系统里,抽象化等级结构中的类封装了operation()方法;而实现化等级结构中的类封装的是operationImpl()方法。当然,在实际的系统中往往会有多于一个的方法。

抽象化等级结构中的方法通过向对应的实现化对象的委派实现自己的功能,这意味着抽象化角色可以通过向不同的实现化对象委派,来达到动态地转换自己的功能的目的。

2.2 代码示例

一般而言,实现化角色中的每个方法都应当有一个抽象化角色中的某一个方法与之对应,但是反过来则不一定。换言之,抽象化角色的接口比实现化角色的接口宽。抽象化角色除了提供与实现化角色相关的方法之外,还有可能提供其他的方法;而实现化角色则往往仅为实现抽象化角色的相关行为而存在。
Abstraction代码示例


public abstract class Abstraction {
    
    protected Implementor impl;
    
    public Abstraction(Implementor impl){
        this.impl = impl;
    }
    //示例方法
    public void operation(){
        
        impl.operationImpl();
    }
}

RefinedAbstraction代码示例

public class RefinedAbstraction extends Abstraction {
    
    public RefinedAbstraction(Implementor impl) {
        super(impl);
    }
    //其他的操作方法
    public void otherOperation(){
        
    }
}

Implementor代码示例

public abstract class Implementor {
    /**
     * 示例方法,实现抽象部分需要的某些具体功能
     */
    public abstract void operationImpl();
}

ConcreteImplementor代码示例

public class ConcreteImplementorA extends Implementor {

    @Override
    public void operationImpl() {
        //具体操作
    }

}

public class ConcreteImplementorB extends Implementor {

    @Override
    public void operationImpl() {
        //具体操作
    }

}

2.3 优缺点

3 适用场景

4 总结

桥接模式是非常简单的,使用该模式时主要考虑如何拆分抽象和实现,并不是一涉及继承就要考虑使用该模式,那还要继承干什么呢?桥接模式的意图还是对变化的封装,尽量把可能变化的因素封装到最细、最小的逻辑单元中,避免风险扩散。因此读者在进行系统设计时,发现类的继承有N层时,可以考虑使用桥接模式。

桥接模式虽然不是一个使用频率很高的模式,但是熟悉这个模式对于理解面向对象的设计原则,包括“开-闭”原则以及组合/聚合复用原则都很有帮助。理解好这两个原则,有助于形成正确的设计思想和培养良好的设计风格。


参考书籍及文章
1.《Java与模式》,电子工业出版社,阎宏

  1. 《大话设计模式》,清华大学出版社,程杰
  2. 《设计模式——可复用面向对象软件的基础》,机械工业出版社,Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides
  3. 《Head First 设计模式(中文版)》,中国电力出版社
  4. 《图说设计模式》,https://design-patterns.readthedocs.io/zh_CN/latest/index.html
上一篇 下一篇

猜你喜欢

热点阅读