admin管理员组

文章数量:1037775

每天认识一种设计模式之简单工厂模式

简单工厂模式定义:

通过一个工厂类根据输入参数决定创建哪种具体产品对象。

适用场景

  • 场景特点:创建逻辑简单,产品类型有限,且不频繁扩展。
  • 典型应用:支付方式选择、文件格式解析器、数据库驱动切换。
示例:支付方式选择
代码语言:php复制
// 支付接口
interface Payment {
    public function pay($amount);
}

// 具体支付类
class Alipay implements Payment {
    public function pay($amount) {
        echo "支付宝支付:{$amount}元\n";
    }
}

class WechatPay implements Payment {
    public function pay($amount) {
        echo "微信支付:{$amount}元\n";
    }
}

// 简单工厂
class PaymentFactory {
    public static function createPayment($type) {
        switch ($type) {
            case 'alipay':
                return new Alipay();
            case 'wechat':
                return new WechatPay();
            default:
                throw new Exception("不支持的支付方式");
        }
    }
}

// 使用
$payment = PaymentFactory::createPayment('alipay');
$payment->pay(100); // 输出:支付宝支付:100元

痛点解决

  • 集中管理支付类的创建,避免在业务代码中频繁使用 new Alipay()new WechatPay()
  • 缺点:新增支付方式需修改工厂类,违反开闭原则(适合小型项目或固定场景)

每天认识一种设计模式之简单工厂模式

简单工厂模式定义:

通过一个工厂类根据输入参数决定创建哪种具体产品对象。

适用场景

  • 场景特点:创建逻辑简单,产品类型有限,且不频繁扩展。
  • 典型应用:支付方式选择、文件格式解析器、数据库驱动切换。
示例:支付方式选择
代码语言:php复制
// 支付接口
interface Payment {
    public function pay($amount);
}

// 具体支付类
class Alipay implements Payment {
    public function pay($amount) {
        echo "支付宝支付:{$amount}元\n";
    }
}

class WechatPay implements Payment {
    public function pay($amount) {
        echo "微信支付:{$amount}元\n";
    }
}

// 简单工厂
class PaymentFactory {
    public static function createPayment($type) {
        switch ($type) {
            case 'alipay':
                return new Alipay();
            case 'wechat':
                return new WechatPay();
            default:
                throw new Exception("不支持的支付方式");
        }
    }
}

// 使用
$payment = PaymentFactory::createPayment('alipay');
$payment->pay(100); // 输出:支付宝支付:100元

痛点解决

  • 集中管理支付类的创建,避免在业务代码中频繁使用 new Alipay()new WechatPay()
  • 缺点:新增支付方式需修改工厂类,违反开闭原则(适合小型项目或固定场景)

本文标签: 每天认识一种设计模式之简单工厂模式