工厂方法模式属于创建型设计模式,核心思想是将对象的创建过程延迟到子类,通过定义接口让子类决定实例化哪个具体类,实现创建逻辑与使用逻辑的解耦。
4. 场景特点
需要灵活扩展产品类型,且不同产品由不同子类负责创建。
<?php
// -------------------- 产品接口 --------------------
interface PaymentGateway {
public function pay(float $amount): string;
}
// -------------------- 具体产品 --------------------
class Alipay implements PaymentGateway {
public function pay(float $amount): string {
return "支付宝支付成功:¥" . $amount;
}
}
class WechatPay implements PaymentGateway {
public function pay(float $amount): string {
return "微信支付成功:¥" . $amount;
}
}
// -------------------- 创建者抽象 --------------------
abstract class PaymentFactory {
// 工厂方法(核心)
abstract public function createPayment(): PaymentGateway;
// 可包含通用业务逻辑
public function processOrder(float $amount): string {
$payment = $this->createPayment();
return $payment->pay($amount);
}
}
// -------------------- 具体创建者 --------------------
class AlipayFactory extends PaymentFactory {
public function createPayment(): PaymentGateway {
return new Alipay();
}
}
class WechatPayFactory extends PaymentFactory {
public function createPayment(): PaymentGateway {
return new WechatPay();
}
}
// -------------------- 客户端使用 --------------------
function clientCode(PaymentFactory $factory, float $amount) {
echo $factory->processOrder($amount) . PHP_EOL;
}
// 使用支付宝
clientCode(new AlipayFactory(), 100.50);
// 使用微信支付
clientCode(new WechatPayFactory(), 200.00);
/* 输出:
支付宝支付成功:¥100.5
微信支付成功:¥200
*/
优势 | 说明 |
---|---|
解耦创建逻辑 | 客户端只需与抽象接口交互 |
符合开闭原则 | 新增支付方式无需修改现有代码 |
代码可维护性高 | 创建逻辑集中管理 |
支持多态扩展 | 可结合配置系统动态选择支付方式 |
特性 | 工厂方法模式 | 简单工厂模式 |
---|---|---|
扩展性 | 通过子类扩展(无需修改父类) | 需要修改工厂类逻辑 |
符合开闭原则 | ✅ 是 | ❌ 否 |
结构复杂度 | 较高(需要继承体系) | 较低(单一工厂类) |
适用场景 | 需要频繁扩展产品类型 | 产品类型固定且较少 |
if/switch
简单工厂原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。