面向对象设计与分析40讲(16)静态工厂方法模式
2023-12-24 23:46:40
前面我们介绍了简单工厂模式,在创建对象前,我们需要先创建工厂,然后再通过工厂去创建产品。
如果将工厂的创建方法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() {
// 实现具体功能
}
};
文章来源:https://blog.csdn.net/HandsomeHong/article/details/135176572
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!