桥接模式

桥接模式概述

引入:毛笔与蜡笔的“故事”

分析

  • 蜡笔:颜色和型号两个不同的变化维度(即两个不同的变化原因)耦合在一起,无论是对颜色进行扩展还是对型号进行扩展都势必会影响另一个维度。
  • 毛笔:颜色和型号实现了分离,增加新的颜色或者型号对另一方没有任何影响。
画笔中存在的两个独立变化维度示意图

那么,在软件开发中如何将多个变化维度分离?

桥接模式的定义:将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

  • 对象结构型模式。
  • 又被称为柄体(Handle and Body)模式或接口(Interface)模式。
  • 用抽象关联取代了传统的多层继承。
  • 将类之间的静态继承关系转换为动态的对象组合关系。

桥接模式的结构与实现

桥接模式的结构

桥接模式的角色

  • Abstraction(抽象类)
  • RefinedAbstraction(扩充抽象类)
  • Implementor(实现类接口)
  • ConcreteImplementor(具体实现类)

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

在使用桥接模式时应该首先识别出一个类所具有的两个独立变化的维度,将它们设计为两个独立的继承等级结构,为两个维度都提供抽象层,并建立抽象耦合。

以引入部分的毛笔为例,由于型号使其固有的维度,因此可以设计一个抽象的毛笔类,在该类中声明并部分实现毛笔的业务方法,而将各种型号的毛笔作为子类;颜色是毛笔的另一个维度,由于它与毛笔之间存在一种“设置”的关系,因此可以提供一个抽象的颜色接口,而将具体的颜色作为实现该接口的子类。在此,型号可以被认为是毛笔的抽象部分,而颜色是毛笔的实现部分。

桥接模式的优缺点与适用环境

模式优点

  • 分离抽象接口及其实现部分。
  • 可以取代多层继承方案,极大地减少了子类的个数。
  • 提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则。

模式缺点

  • 会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就针对抽象层进行设计与编程。
  • 正确识别出系统中两个独立变化的维度并不是一件容易的事情。

模式适用环境

  • 需要在抽象化和具体化之间增加更多的灵活性,避免在两个层次之间建立静态的继承关系。
  • 抽象部分和实现部分可以以继承的方式独立扩展而互不影响。
  • 一个类存在两个(或多个)独立变化的维度,且这两个(或多个)维度都需要独立地进行扩展。
  • 不希望使用继承或因为多层继承导致系统类的个数急剧增加的系统。

发表回复

Breeze Wang

A student majoring in Software Engineering at Central South University has an understanding of software development techniques, software architecture, and is able to use Godot to develop game projects. I am currently in the Game Development Laboratory at Central South University. I have experience participating in Global Game Jam. Loving game development.