C++工厂模式的作用(工厂方法、Factory Method、Factory Pattern)
代码示例
工厂的作用
1. 对象创建的封装 🏭
TaxStrategy* NewStrategy() {
if (country == "CN") {
return new CNTax();
} else if (country == "US") {
return new USTax();
} else if (country == "DE") {
return new DETax();
} else if (country == "FR") {
return new FRTax();
}
}
- 工厂把创建对象的复杂逻辑封装起来
- 客户端不需要知道具体创建哪个类的实例
- 只需要告诉工厂"我要什么",工厂负责"怎么创建"
2. 解耦客户端和具体类 🔗
没有工厂的情况:
// 客户端需要直接决定创建哪个策略
TaxStrategy* strategy;
if (country == "CN") {
strategy = new CNTax(); // 客户端直接依赖具体类
} else if (country == "US") {
strategy = new USTax();
}
// ... 复杂的判断逻辑
有工厂的情况:
// 客户端只需要调用工厂
StrategyFactory factory(country);
TaxStrategy* strategy = factory.NewStrategy(); // 简洁!
3. 统一的创建入口 🚪
- 所有税收策略的创建都通过同一个工厂
- 便于统一管理和维护
- 如果要添加新的税收策略(比如日本税收),只需要在工厂里添加一个分支
4. 隐藏实现细节 🎭
- 客户端不需要知道:
- 有哪些具体的税收策略类
- 每个策略类的构造函数参数
- 创建对象的复杂逻辑
- 工厂对外提供统一的接口
在这个项目中的具体体现
// main.cpp 中的使用
StrategyFactory factory(country.first); // 告诉工厂国家代码
SalesOrder order(&factory, context); // SalesOrder内部调用工厂创建策略
// SalesOrder 构造函数中
this->strategy = strategyFactory->NewStrategy(); // 简单调用,无需复杂判断
总结
工厂模式的核心作用是:把"创建什么对象"的决策权从客户端转移到工厂,实现创建逻辑的集中管理和封装。这样代码更清晰、更容易维护,也更符合"开闭原则"(对扩展开放,对修改关闭)。
ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ
ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ ᅟᅠ
更多推荐


所有评论(0)