前面我们介绍了简单工厂模式,在创建对象前,我们需要先创建工厂,然后再通过工厂去创建产品。
如果将工厂的创建方法static化,那么无需创建工厂即可通过静态方法直接调用的方式创建产品:
// 工厂类,定义了静态工厂方法
class SimpleFactory {
public:
static Product* createProduct(const string& type) {
if (type == "A") {
return new ConcreteProductA();
} else if (type == "B") {
return new ConcreteProductB();
} else {
return nullptr;
}
}
};
将工厂创建方法改成 static 的优缺点如下:
优点:
缺点:
总的来说,静态工厂方法在某些情况下可以简化代码,提高可读性,但也存在一些局限性,特别是在需要灵活扩展和可测试性方面表现不佳。在实际应用中,需要根据具体的场景和需求来选择是否使用静态工厂方法。
静态工厂方法还可以直接集成到类中,简称self create。
class A {
private:
A() {} // 私有构造函数,确保不能通过外部代码创建新实例
public:
static A* CreateInstance() {
return new A(); // 创建新实例并返回指针
}
public:
void DoSomething() {
// 实现具体功能
}
};