PHP工厂模式适合的场景
工厂模式是一种创建型设计模式,在以下场景中特别适用:

对象创建逻辑复杂
- 场景示例:电商系统创建不同类型的订单(普通订单、团购订单、秒杀订单)
- 优势:封装复杂的初始化逻辑,避免调用方直接处理对象创建细节
需要根据条件动态选择具体类
- 场景示例:支付系统根据用户选择的支付方式(支付宝、微信、银联)创建对应的支付处理器
- 示例代码:
class PaymentFactory { public static function create(string $type): PaymentInterface { return match($type) { 'alipay' => new AlipayPayment(), 'wechat' => new WechatPayment(), 'unionpay' => new UnionpayPayment(), default => throw new \InvalidArgumentException("不支持支付方式") }; } }
希望解耦客户端与具体类
- 场景示例:插件系统中的扩展点创建
- 优势:客户端只需依赖抽象接口,不直接依赖具体实现类
需要集中管理对象创建
- 场景示例:数据库连接的创建、缓存实例的管理
- 优势:统一管理对象的创建过程,便于修改和维护
创建对象时需要进行统一配置
- 场景示例:日志记录器创建时需要统一设置日志级别、格式等
- 优势:在工厂中集中配置,避免重复代码
对象创建需要缓存或池化
- 场景示例:数据库连接池、线程池
- 优势:工厂可以管理对象的生命周期,实现对象复用
不适用场景:
- 简单对象创建:直接
new即可,过度设计增加复杂性 - 对象类型不变或极少变化:使用工厂模式价值有限
- 小型应用:引入额外抽象层可能得不偿失
实战建议:
- 当发现代码中多处出现
if/switch判断创建不同类型对象时,考虑引入工厂模式 - 结合依赖注入容器使用效果更佳(如 Laravel 的容器底层就大量使用工厂思想)
- 简单工厂、工厂方法、抽象工厂根据复杂程度选择适合版本