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

mac2025-02-09  9

目录

一、桥接模式的思想

二、使用案例

 1、不使用设计模式实现

1.1 代码示例

1.2  缺点

2、采用桥接设计模式

2.1、类图结构

2.2、代码示例


一、桥接模式的思想

现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备

3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型

号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。

实际上,蜡笔和毛笔的关键一个区别就在于笔和颜色是否能够分离。即将抽象化

(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化"。关键就在于能否

脱耦。蜡笔的颜色和蜡笔本身是分不开的,所以就造成必须使用15支色彩、大小各异的蜡笔

来绘制图画。而毛笔与颜料能够很好的脱耦,各自独立变化,便简化了操作。在这里,抽象

层面的概念是:"毛笔用颜料作画",而在实现时,毛笔有大中小三号,颜料有红绿蓝黑白等

5种,于是便可出现3×5种组合。每个参与者(毛笔与颜料)都可以在自己的自由度上随意

转换。

蜡笔由于无法将笔与颜色分离,造成笔与颜色两个自由度无法单独变化,使得只有创建

15种对象才能完成任务。

Bridge模式将继承关系转换为组合关系,从而降低了系统间的耦合,减少了代码编写量。

  一维变化用继承、多维变化用桥接

 

二、使用案例

          操作系统的组装。

 1、不使用设计模式实现

1.1 代码示例

#include <iostream> using namespace std; class Computer { public: void run(); }; class HpWindows7 :public Computer { }; class HpWindow8 :public Computer { }; class HpWindowsX :public Computer { };

1.2  缺点

       类膨胀

2、采用桥接设计模式

2.1、类图结构

 

2.2、代码示例

class IOS { public: IOS(){} virtual ~IOS() { } virtual void run() = 0; }; class CWindows :public IOS { public: virtual void run() { cout << "Windows 正在运行" << endl; } }; class CLinux :public IOS { public: virtual void run() { cout << "Linux 正在运行" << endl; } }; class IComputer { public: virtual void Install(IOS *pOS) = 0; //建立桥 }; class CLenvo :public IComputer { public: virtual void Install(IOS *pOS) { cout << "Lenvo正在安装操作系统" << endl; pOS->run(); } }; class CDell :public IComputer { public: virtual void Install(IOS *pOS) { cout << "Dell正在安装操作系统" << endl; pOS->run(); } }; class CAcer:public IComputer { public: public: virtual void Install(IOS *pOS) { cout << "Acer正在安装操作系统" << endl; pOS->run(); } private: }; int main(void) { IOS* pWindows = new CWindows; IOS* pLinux = new CLinux; IComputer* pLenvo = new CLenvo; pLenvo->Install(pWindows); system("pause"); return 0; }
最新回复(0)