BIMHome v1.0.0
BIMHome接口文档说明
Factory.h
浏览该文件的文档.
1/************************************************************************
2* @file Factory.h
3*
4* @brief 创建工厂类
5*
6* @details 创建工厂类
7*
8* @author wukx
9*
10* @version v1.0
11*
12* @date 2016.9.29
13*
14* @license 北京华科软科技有限公司
15*
16*************************************************************************/
17
18#ifndef BIMHOMEBASE_FACTORY_H
19#define BIMHOMEBASE_FACTORY_H
20
21#include <list>
22#include <map>
23#include <string>
24#ifndef BH_GLOBAL_H
25#include <BHGlobal.h>
26#endif
27
28
29namespace Base
30{
31
37 class BaseExport AbstractProducer
38 {
39 public:
41 virtual ~AbstractProducer() {}
47 virtual void* Produce() const = 0;
48 };
49
56 class BaseExport Factory
57 {
58 public:
65 void AddProducer(const char* sClassName, AbstractProducer* pcProducer);
72 bool CanProduce(const char* sClassName) const;
73
79 std::list<std::string> CanProduce() const;
80
81 protected:
83 virtual ~Factory();
84
91 void* Produce(const char* sClassName) const;
92
93 protected:
94 std::map<const std::string, AbstractProducer*> _mpcProducers;
95 };
96
97 // --------------------------------------------------------------------
98
104 class BaseExport ScriptFactorySingleton : public Factory
105 {
106 public:
117 static void Destruct();
124 const char* ProduceScript(const char* sScriptName) const;
125
126 private:
129
130 private:
132 };
133
140 {
142 }
143
144 // --------------------------------------------------------------------
145
152 class BaseExport ScriptProducer : public AbstractProducer
153 {
154 public:
160 ScriptProducer(const char* name, const char* script) : mScript(script)
161 {
162 ScriptFactorySingleton::Instance().AddProducer(name, this);
163 }
164
165 virtual ~ScriptProducer() {}
171 virtual void* Produce() const
172 {
173 return const_cast<char*>(mScript);
174 }
175
176 private:
177 const char* mScript;
178 };
179
180} //namespace Base
181
182
183#endif //BIMHOMEBASE_FACTORY_H
184
virtual ~AbstractProducer()
Definition Factory.h:41
virtual void * Produce() const =0
生产对象
AbstractProducer()
Definition Factory.h:40
抽象生产者类
Definition Factory.h:38
std::list< std::string > CanProduce() const
获取所有注册的生产者列表
virtual ~Factory()
std::map< const std::string, AbstractProducer * > _mpcProducers
生产者映射
Definition Factory.h:94
Factory()
Definition Factory.h:82
void AddProducer(const char *sClassName, AbstractProducer *pcProducer)
添加新的生产者实例
void * Produce(const char *sClassName) const
根据类名生产对象
bool CanProduce(const char *sClassName) const
检查是否有注册的生产者
工厂类
Definition Factory.h:57
const char * ProduceScript(const char *sScriptName) const
生产脚本
~ScriptFactorySingleton()
Definition Factory.h:128
static ScriptFactorySingleton * _pcSingleton
单例指针
Definition Factory.h:131
static ScriptFactorySingleton & Instance()
获取单例实例
static void Destruct()
销毁单例
ScriptFactorySingleton()
Definition Factory.h:127
脚本工厂单例
Definition Factory.h:105
ScriptProducer(const char *name, const char *script)
构造函数
Definition Factory.h:160
const char * mScript
脚本内容
Definition Factory.h:177
virtual ~ScriptProducer()
Definition Factory.h:165
virtual void * Produce() const
生产脚本实例
Definition Factory.h:171
脚本生产者类
Definition Factory.h:153
ScriptFactorySingleton & ScriptFactory()
获取脚本工厂实例
Definition Factory.h:139
Definition BaseFigureFactory.h:24