文章目录
前言
今天复习了桥接模式,感觉挺有用的,这里跟大家分享下。
1. 桥接模式理解
桥接模式,就是对合成/聚合复用原则的应用,替代类间继承关系,实现类间松耦合。个人觉得原理上和策略模式差不多,将变化部分从类中抽离,只是策略模式抽离的是多变的算法,桥接模式抽离的是类间的继承关系,即将继承改为组合或聚合关系,这样就可以确保独立变化,不会对其它类有影响,方便扩展,这也满足开放-封闭原则,即对扩展开放,对修改关闭。这里的桥接指的就是类间的组合/聚合关联关系。
桥接模式比较正规的定义与类图(引用《大话设计模式》)如下所示:
2. 桥接模式C++实现
这里以手机与手机软件的关系为例实现桥接模式。
我们知道,手机有不同的品牌,手机内也可以安装不同的软件,如果按照继承关系来处理手机与手机软件的关系,如下图所示:
从继承关系类图可以看出,如果要新增软件或者新增手机品牌,要添加多个继承关系,比如按照软件分类,新增一个软件,就要添加新的软件类,以及不同品牌手机对应的软件子类;新增一个手机品牌,就需要在不同软件类添加对应的子类,是不是很麻烦!
如果采用桥接模式,类图如下:
不论是新增手机品牌还是软件,只要新增对应的一个类就可以,不需要添加其它任何附加类,是不是很棒!
上述例子的桥接模式C++代码实现:
#include <iostream>
#include <memory>
#include <boost\mpl\vector.hpp>
#include <boost\mpl\for_each.hpp>
//*****************Bridge Pattern*******************
//抽象手机软件
class HandsetSoft
{
public:
virtual void Run() = 0;
};
class HandsetGame