代码:通过工厂方式创建类对象
#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;
}