0 桥梁模式和享元模式
桥梁模式是因为类中的某一数据成员具有不同的实现,因此将该部分抽象出来,作为可变部分。
享元模式则是因为类中某一数据成员和其他实例可以共享,因此将该部分抽象出来,大家共享。
1 桥梁模式
1.0 需求
在聚合的关联中,如果某个数据成员具有不同的类型,也就是说有多种实现,将不变的部分与可变的部分分离,就是桥梁模式。
1.1 实现
桥梁模式相对简单,当一个类A中的一个数据成员具有不同的实现,那么就让这些不同的实现继承同一个基类。类A中保存基类的指针。
//操作系统的基类 class OS { public: virtual int version()=0; }; //具体的操作系统,另外还有win、unix class linux:public OS { public: virtual int version(); }; //电脑的基类 class Computer { public: vtual void installOs(OS *os)=0; }; //具体的电脑类 class Dell"public Computer { public: virtual void installOs(Os *os); private: OS* _os; };
1.2 注意
关联的方式是聚合。所以说是可变的,数据成员与类的实例的生命周期可以不同。
2 享元模式
2.0 需求
类中某个数据成员表示该类的属性,而且存在大量类的实例。而表示属性的数据成员却只有有限的几种。
因此将这些表示属性的数据成员从类中分离出来,类的实例共享这些属性。
这就是享元模式,享元的意思是共享。
2.1 实现
既然要共享,那就需要一个容器存储可以共享的元素。
class ABAttr { public: //具体属性 //获取属性 // 其他类需要属性的时候就调用get来获取,如果map中没保存那么就先new一个,然后保存,再返回 static ABAttr* get(Key); private: //保存不变的属性 static map<key,ABAttr*> map; }; // 具体的属性 class Attr_1 : public ABAttr { }; // 具体的属性 class Attr_2 : public ABAttr { };