Prototype 设计模式在框架中的应用

------------恢复内容开始------------

在框架或一个系统中,动态添加是非常常见的需求,定义好接口和虚基类,子类的实现随时动态添加进来,不会因为新增加一个模块或者功能重新修改代码:

解决方式:

  1.基类/接口类中,定义一个静态vector,指向自己的类型

  2.基类/接口类中,定义两个静态方法,一个用于添加到vector里,另一个用于取vector里的元素

  3.子类在实现的时候, 都定义一个静态方法,用于创建一个自己(最好的是静态的),然后把自己的指针传入到 vector里

代码(伪):

  class ITools{

  public:

    static Tool * getTool(uint16 id);

    static addTool(Tool* tool){m_toolVector.pushback(tool)}

    static vector<Tools* >   m_toolVector;

  private:

    uint16 id;

    string name;  

  }

  class Tool_A:public ITools

  {

  private:

    Tool_A(){

      addTool(this);  

    }

  public:

    Tool_A* getObject();

  }

//具体的实现类,在类定义的时候,定义一个全局或者静态函数,创建一个自己(Tool_A), Tool_A在构造的时候,通过调用父类的静态函数,把自己的指针放到父类的List/Vector里,

//这样,只要按照这个流程,无论后期添加多少的子类,父类和调用的结构是稳定的,不需要修改。 如果子类是以dll形式实现的,同样的形式可以实现。

//如果感觉这样的浪费内存资源(每个子类无论是否使用,都new出来),可以用策略模式,在父类的vector里,存放的不是Tool* ,而是每个创建子类的函数。

原文地址:https://www.cnblogs.com/darwen/p/12268233.html