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
{
};