zoukankan      html  css  js  c++  java
  • 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* ,而是每个创建子类的函数。

  • 相关阅读:
    序列化 Serialization
    http soap关系
    sql 查询
    返回最后插入到标识列的值(scope_identity.ident_current.@@identity)
    匿名方法
    九、volatile与Java内存模型
    八、Java内存模型JMM
    十、CAS
    CUSTOM ROUTE CONSTRAINTS
    获取本地数据库
  • 原文地址:https://www.cnblogs.com/darwen/p/12268233.html
Copyright © 2011-2022 走看看