C++ (Qt)class MyObject {}; class MyObject_Child1 : public MyObject {}; class MyObject_Child2 : public MyObject {}; ObjectFactory<QString, MyObject> factory;//При этом никто не мешает написать, например, так: ObjectFactory<int, MyObject> factory; factory.registerClass<MyObject_Child1>("my object 1");factory.registerClass<MyObject_Child2>("my object 2"); MyObject_Child1 *child1 = qobject_cast<MyObject_Child1*>(factory.create("my object 1"));MyObject_Child2 *child2 = qobject_cast<MyObject_Child2*>(factory.create("my object 2"));
C++ (Qt)class AWebSocketFactory : public AWebFactory<QLatin1String, AWebSocket>{public: //! Конструктор. AWebSocketFactory() { registerClass<AWebEpollSocket>(QLatin1String("AWebEpollSocket")); _constructor = constructor(QLatin1String("AWebEpollSocket")); } //! Деструктор. virtual ~AWebSocketFactory() {} //! Функция создания объекта класса. AWebSocket *create() const {return _constructor->create();} //! Функция возврата ранее зарезервированного, либо нового объекта класса. AWebSocket *acquire() {return _constructor->acquire();} //! Функция установки объекта класса в резерв. void release(AWebSocket *object) {_constructor->release(object);} private: AbstractConstructor *_constructor; };
C++ (Qt)class Base {}; class Child1: public Base {};class Child2: public Base {};...class ChildN: public Base {};
C++ (Qt)Object * Factory::GetFreeObject( const char * name ); // создаем новый если нет свободныхObject * Factory::GetAnyObject( const char * name ); // возвращаем имеющийся свободен или нет
C++ (Qt)template<typename Key, class Base>class AWebFactory{ //! Функция создания объекта класса. Base *create(const Key &key) const {return _classes.value(key)->create();}