代码:通过工厂方式创建类对象

代码:通过工厂方式创建类对象

#include <iostream>
#include <map>

class IBase {
public:
    IBase() {}
    virtual ~IBase() {}
};

class IFactoryBase {
public:
    IFactoryBase() {}
    virtual ~IFactoryBase() {}

    virtual const char* clsid() = 0;
    virtual IBase* create() = 0;
};

class CBase : public IBase {
public:
    class CFactory : public IFactoryBase {
    public:
        CFactory() {}
        ~CFactory() {}
        
        const char* clsid() {
            return "c1";
        }   
        
        IBase* create() {
            return CBase::instance();
        }   
    };   
    
    void func() {
        std::cout << "Hello World!" << std::endl;
    }   
    
    static CBase* instance() {
        if(s_p == NULL) {
            s_p = new CBase();
        }   
        return s_p;
    }   
    
private:
    CBase() {}
    ~CBase() {}
    
    static CBase* s_p;
};  

CBase* CBase::s_p = NULL;

class ComManager {
public:
    static void setComObj(IFactoryBase* pu) {
        std::string strId = pu->clsid();
        s_mapStrFac[strId] = pu;
    }

    static IBase* getComObj(const char* clsid) {
        std::string strId = clsid;
        IFactoryBase* pu = s_mapStrFac[strId];
        if(pu) {
            return pu->create();
        }
    }
private:
    static std::map<std::string, IFactoryBase*> s_mapStrFac;
};

std::map<std::string, IFactoryBase*> ComManager::s_mapStrFac;

int main() {
    static CBase::CFactory s_a;
    ComManager::setComObj(&s_a);

    CBase* pB = (CBase*)(ComManager::getComObj("c1"));
    pB->func();

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值