• 简单工厂模式


    简单工厂模式:继承于基类的子类,创建过程交于一个工厂来创建,通过赋予不同的创建标识来创建不同的子类
    优点
    1.隐藏了对象创建的细节,将产品的实例化推迟到子类中实现。
    
    2.不用关心使用的是哪个产品,只需要知道用哪个工厂就行了,提供的类型也可以用比较便于识别的字符串。
    
    3.方便添加新的产品子类,每次只需要修改工厂类传递的类型值就行了。
    
    4.遵循了依赖倒转原则。
    缺点
    1.子类的类型差不多,使用的方法名都相同,如果类比较多,而所有的类又必须要添加一种方法,则会是非常麻烦的事情。
    或者是一种类另一种类有几种方法不相同,客户端无法知道是哪一个子类,也就无法调用这几个不相同的方法。
    2.每添加一个产品子类,都必须在工厂类中添加一个判断分支,这违背了开放-封闭原则。
    struct STRedisJsonData
    {
        //指令类型
        int nCode;
        //json数据
        std::string strJson;
        //web id
        std::string strWebID;
        //json解析器
        Json::Reader reader;
        //json的根节点
        Json::Value root;
    };
    using STRedisJsonDataPtr = std::shared_ptr<STRedisJsonData>;
    class CRedisBase: public std::enable_shared_from_this<CRedisBase>
    {
    public:
        CRedisBase();
        CRedisBase(STRedisJsonDataPtr p): m_pack(p)
        {
        }
        ~CRedisBase();
        virtual void HandleCmd(){};
        virtual int ParseJson(){ return 0; }
        virtual int Process(){ return 0; }
    protected:
        STRedisJsonDataPtr m_pack; 
    };
    using CRedisBasePtr = std::shared_ptr<CRedisBase>;
    class CGetData :public CRedisBase
    {
    public:
        CGetData(STRedisJsonDataPtr p)
            : CRedisBase(p){
        }
    protected:
        virtual void HandleCmd();
        virtual int ParseJson() override;
    };
    CRedisBasePtr CRedisMgr::CreateHandler(STRedisJsonDataPtr data)
    {
     CRedisBasePtr Handler = NULL;
     switch (data->nCode)
     {
     case 1001:
      Handler.reset(new CGetData(data));
      break;
     }
     return Handler;
    }
    void main()
    {
        CRedisBasePtr Handler = g_RedisMgr.CreateHandler(ptrMsg);
        if (Handler)
        {
            Handler->HandleCmd();
        }
    }
  • 相关阅读:
    vue项目index.html缓存
    vue刷新当前页面
    keep-alive
    JS刷算法题:二叉树
    CSS动效集锦,视觉魔法的碰撞与融合(三)
    算法:栈和队列题目集合(一)
    浅谈设计模式(二):装饰器模式|中介模式|原型模式
    聊聊JS的二进制家族:Blob、ArrayBuffer和Buffer
    浅谈设计模式(一):状态模式|外观模式|代理模式
    纵论WebAssembly,JS在性能逆境下召唤强援
  • 原文地址:https://www.cnblogs.com/osbreak/p/10106123.html
Copyright © 2020-2023  润新知