C++注册多个工厂实现类
时间: 2024-09-15 14:02:06 浏览: 30
在C++中,为了支持多种工厂模式实现不同的类,可以使用模板、智能指针以及策略模式等技术。例如,你可以创建一个工厂接口,然后让各个具体的工厂类去实现这个接口。这里有一个简单的例子:
```cpp
#include <memory>
#include <vector>
// 工厂接口
class IFactory {
public:
virtual ~IFactory() {}
virtual std::unique_ptr<SomeClass> createObject() const = 0;
};
// 具体工厂A
class FactoryA : public IFactory {
public:
std::unique_ptr<SomeClass> createObject() const override {
return std::make_unique<ConcreteClassA>();
}
};
// 具体工厂B
class FactoryB : public IFactory {
public:
std::unique_ptr<SomeClass> createObject() const override {
return std::make_unique<ConcreteClassB>();
}
};
// 抽象类 SomeClass
class SomeClass {
public:
virtual ~SomeClass() {}
// 其他成员函数...
};
// 具体实现类 ConcreteClassA 和 ConcreteClassB
class SingletonContainer {
private:
static std::vector<std::unique_ptr<IFactory>> factories;
public:
static void registerFactory(IFactory* factory) {
factories.push_back(factory);
}
static std::unique_ptr<SomeClass> createObject(const std::string& type) {
for (auto& factory : factories) {
if (factory->canCreate(type)) {
return factory->createObject();
}
}
throw std::runtime_error("Unsupported class type");
}
// 其他静态方法...
};
// 初始化工厂容器
SingletonContainer::factories = {std::make_unique<FactoryA>(), std::make_unique<FactoryB>()};
// 使用示例
int main() {
std::unique_ptr<SomeClass> obj = SingletonContainer::createObject("ConcreteClassA"); // 根据名称选择合适的工厂
// ...
return 0;
}