设计模式(10) - 结构型模式之 桥接模式

1. 桥接模式介绍

来自百度百科

1.1 介绍

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。

1.2 概述

在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,那么如何应对这种“多维度的变化”?如何利用面向对象的技术来使得该类型能够轻松的沿着多个方向进行变化,而又不引入额外的复杂度?这就要使用Bridge模式

1.3 意图

在提出桥梁模式的时候指出,桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。这句话有三个关键词,也就是抽象化、实现化和脱耦。

2. 代码

2.0 场景介绍

我们都知道电脑有很多分类,比如台式机,笔记本。电脑还有很多品牌,比如联想、惠普、戴尔等。我们如何来表示这些电脑的关系呢?

2.1 不使用桥接模式

2.1.1 类图

在这里插入图片描述

2.1.2 扩展带来的问题

那么我想加一个联想平板电脑。那么需要如何做呢?

在这里插入图片描述

很明显,这个模式有一个问题,就是类的个数膨胀的问题。

  • 如果增加一个新的电脑类型,也要增加品牌下面的类
  • 如果要增加一个新的品牌, 也要增加各种类型的电脑
  • 很明显,导致此问题的原因,就是这里面含有两个维度的变化。那么可以用桥接模式对这两个维度进行一个连接,那么看下面的改进

2.2 使用桥接模式

处理多层继承结构,多维度变化的场景,将各个维度 设计成 独立的 继承结构, 然后再用聚合等关系进行一个相应的联系。即可

2.2.1 类图

在这里插入图片描述

2.2.2 代码

  • Computer 体系
    在这里插入图片描述

  • 品牌体系
    在这里插入图片描述

  • 测试代码
    在这里插入图片描述

2.2.3 扩展问题

在这里插入图片描述

3. 总结

  • 桥接模式可以取代多层继承的方案。减少了类的个数,降低了维护成本
  • 个人感觉还有一个缺点,那就是啥时候用,怎么用,这也是一个难题,如何分析出来他们之间的维度关系。???对吧都是难题。

猜你喜欢

转载自blog.csdn.net/weixin_42041788/article/details/107134064