设计模式读书笔记(四) Bridge(桥梁)模式
2016-07-13 15:52
513 查看
一、模式介绍
GOF 在《设计模式》中给桥梁模式的定义为:将抽象部分与它的实现部分分离,使它 们都可以独立地变化。这里的抽象部分和实现部分不是我们通常认为的父类与子类、接口与 实现类的关系,而是组合关系。也就是说,实现部分是被抽象部分调用,以用来完成(实现) 抽象部分的功能简单来说,桥梁模式就是为了降低耦合,让抽象与实现相分离,使得两者都能够各自变化
二、例子实现
假设我现在有两台电脑,一台是预装windows系统的,一台是预装ios系统的,其实可以用继承来实现不同的电脑和系统,但是如果是我要生产出3个品牌的电脑,然后每个品牌的电脑有3个不同的系统进行预售,很好理解,如果是继承的方式,我们需要9个子类,但是如果是采用了桥梁的模式,我们就只需要6个子类即可。下面我们来看一个简单的例子:我们需要有一个Computer的父类,来定义每一台电脑公共的属性,另外,还需要有一个OS的类来实现每一台电脑预装的系统:
class OS; class Computer { public: Computer(){}; virtual ~Computer(){}; virtual void InstallOS(OS *os) = 0; protected: OS *operaSystem; }; class Apple :public Computer { public : Apple(); ~Apple(); void InstallOS(OS *os); }; class Microsoft :public Computer { public: Microsoft(); ~Microsoft(); void InstallOS(OS *os); };
class OS { public: OS(){}; virtual ~OS(){}; virtual void Work() = 0; }; class Windows :public OS { public: Windows(); ~Windows(); void Work(); }; class IOS :public OS { public: IOS(); ~IOS(); void Work(); };
下面是实现的部分:
IOS::IOS() :OS() { } IOS::~IOS() { } void IOS::Work() { cout << "I'm working with IOS " << endl; } Windows::Windows() :OS() { } Windows::~Windows() { } void Windows::Work() { cout << "I'm working with Windows " << endl; }
Apple::Apple() :Computer() { cout << "I'm Mac!" << endl; } Apple::~Apple() { if (operaSystem) delete operaSystem; } void Apple::InstallOS(OS *os) { operaSystem = os; operaSystem->Work(); } Microsoft::Microsoft() :Computer() { cout << "I'm Microsoft!" << endl; } Microsoft::~Microsoft() { if (operaSystem) delete operaSystem; } void Microsoft::InstallOS(OS *os) { operaSystem = os; operaSystem->Work(); }
接下来是调用部分:
#include "OS.h" #include "Computer.h" int main() { Computer *lenovo = new Microsoft(); lenovo->InstallOS(new Windows()); Computer *Mac = new Apple(); Mac->InstallOS(new IOS()); delete lenovo; delete Mac; getchar(); }
这样就实现了抽象和实现的分离,关于这次的代码,可以到github上下载:
这里写链接内容
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- 只需十分钟,结果大不同 |《深度思考》
- 《洋葱阅读法》读书笔记
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解