设计模式-桥接模式(结构型)、享元模式(结构型)

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
{

};

  

原文地址:https://www.cnblogs.com/perfy576/p/8553497.html