tz1
#1
#include "stdafx.h"
#include
#include
using namespace std;
class BaseDraw {
public:
virtual void Draw() = 0;
};
class Factory {
public:
typedef BaseDraw *(*CreateFun)();
~Factory() {}
static Factory* getInstance() {
if (this_ == NULL) {
this_ = new Factory;
}
return this_;
}
bool Register(string name,CreateFun p) {
map_date_[name] = p;
return true;
}
BaseDraw* CreateClass(string name) {
return map_date_[name]();
}
private:
map map_date_;
static Factory* this_;
};
Factory* Factory::this_ = NULL;
class XX1Draw :public BaseDraw {
public:
static XX1Draw* Create() {
return new XX1Draw;
}
virtual void Draw() {
}
};
class XX2Draw :public BaseDraw {
public:
static XX2Draw* Create() {
return new XX2Draw;
}
virtual void Draw() {
}
};
static bool b1 = Factory::getInstance()->Register("XX1Draw",(BaseDraw *(*)())XX1Draw::Create);
static bool b2 = Factory::getInstance()->Register("XX2Draw",(BaseDraw *(*)())XX2Draw::Create);
int _tmain(int argc, _TCHAR* argv[])
{
Factory::getInstance()->CreateClass("XX2Draw")->Draw();
Factory::getInstance()->CreateClass("XX1Draw")->Draw();
return 0;
}