设计模式:桥接模式

0x01 背景

当一个类存在一个(或多个)变化的维度时,如果采用继承的方式来定义不同的实现,会导致实现类数量呈指数爆炸,比如对于画布来说,形状上有三种:正方形、长方形、圆形,颜色上有三种颜色:红色,蓝色、绿色。一共有3 * 3 =9种画布,如果采用继承的方式来实现具体的画布类,则有9种画布类,而且每添加一种形状(如椭圆)画布,需要实现所有颜色的椭圆形画布类,类似的每添加一种颜色,就需要实现该颜色的所有形状的画布类,这样会导致类个数的指数爆炸。桥接模式就是为了这样的问题。

0x02 桥接模式
  1. 将抽象和实现解耦,让他们可以独立变化
  2. 一个类存在两个(或多个)独立变化的维度,我们可以通过组合的方式,让这两个(或多个)维度可以独立进行扩展
  3. 通过组合关系代替继承关系,避免继承层次的指数级爆炸。

桥接模式遵循“组合优于继承”的设计原则

2.1 桥接模式的UML类图
image.png

桥接模式将形状和颜色这两个不同的变化维度拆分开:AbstractShap(抽象类)和Color(接口),让这两种维度独立变化,然后通过组合的方式将这两种维度组合在一起,所以最终类的个数只有:形状个数 + 颜色个数。

2.2 桥接模式的应用场景

当一个类存在两个(或多个)独立变化的维度时,可以将两个(或多个)维度拆分开独立变化,然后通过组合的方式进行扩展。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、桥接模式(Bridge Pattern) 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又...
    dongrui100阅读 3,505评论 0 0
  • 桥接模式(Bridge) 在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。如何设计...
    Acton_zhang阅读 3,146评论 0 1
  • 引言   咋一看这个模式,看的一头懵逼,纯概念很来理解。举个例子吧 就像一座桥,链接两端。先回顾上一节的装饰模式,...
    天道__阅读 6,161评论 0 2
  •   注意:如果不想浪费时间,请一定要点我。   在现实生活中,有些类具有多个维度的变化,比如图形既可以按照形状划分...
    布鲁斯理阅读 4,728评论 0 1
  • 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型...
    _muggle阅读 1,638评论 0 0