PHP设计模式之工厂模式
封面图
•
2025-10-30
•
PHP
185
0
0
0
在 PHP 中,**工厂模式(Factory Pattern)** 是一种常见的 **创建型设计模式**,用于封装对象的创建逻辑。它通过一个工厂类来创建不同类型的对象,而无需在客户端代码中直接实例化这些对象。 --- ## 🧾 一、什么是工厂模式? 工厂模式的核心思想是: > **将对象的创建过程交给一个工厂类来处理,而不是由客户端直接创建对象。** 这样做的好处包括: - 解耦:客户端不需要知道具体类的实现细节。 - 扩展性:新增产品时,只需修改工厂类,无需改动客户端代码。 - 简化对象创建逻辑:特别是当对象创建逻辑复杂时。 --- ## 🧱 二、工厂模式的结构 工厂模式通常包含以下几个角色: 1. **Product(产品接口/抽象类)** 定义产品的公共接口或抽象方法。 2. **ConcreteProduct(具体产品类)** 实现 Product 接口的具体类。 3. **Factory(工厂类)** 负责根据参数创建不同的 ConcreteProduct 实例。 --- ## 🧩 三、PHP 工厂模式示例 ### 示例场景:不同类型的用户(普通用户、管理员) #### 1. 定义产品接口 ```php <?php interface User { public function say(); } ``` #### 2. 实现具体产品类 ```php class NormalUser implements User { public function say() { echo "这是普通用户。\n"; } } class AdminUser implements User { public function say() { echo "这是管理员。\n"; } } ``` #### 3. 创建工厂类 ```php class UserFactory { public static function createUser($type) { if ($type === 'admin') { return new AdminUser(); } else { return new NormalUser(); } } } ``` #### 4. 使用工厂创建对象 ```php $user1 = UserFactory::createUser('normal'); $user1->say(); // 输出:这是普通用户。 $user2 = UserFactory::createUser('admin'); $user2->say(); // 输出:这是管理员。 ``` --- ## 📌 四、工厂模式的优点 | 优点 | 描述 | |------|------| | 松耦合 | 客户端不依赖具体类,只依赖接口 | | 易于扩展 | 新增产品类型时,只需修改工厂类 | | 简化对象创建 | 将复杂的创建逻辑封装到工厂中 | --- ## ⚠️ 五、工厂模式的缺点 | 缺点 | 描述 | |------|------| | 增加系统复杂度 | 对于简单对象,可能显得过度设计 | | 需要维护工厂类 | 当产品种类多时,工厂类可能会变得臃肿 | --- ## 🔄 六、工厂模式 vs 简单工厂 vs 抽象工厂 | 模式 | 说明 | |------|------| | **简单工厂** | 一个工厂类负责创建所有产品(如上面的例子) | | **工厂方法** | 每个产品都有一个对应的工厂类(更灵活) | | **抽象工厂** | 创建一系列相关或依赖的对象(如创建多个 UI 控件) | --- ## ✅ 七、总结 工厂模式是一种非常实用的设计模式,尤其适用于需要根据条件动态创建对象的场景。在 PHP 中,使用工厂模式可以提升代码的可维护性和扩展性。 如果你有具体的业务场景,我可以帮你设计一个更符合你需求的工厂模式实现。 是否需要我提供一个基于 Laravel 或 Symfony 的工厂模式示例?
上一篇:
PHP设计模式之策略模式
下一篇:
PHP设计模式之注册模式
标题录入,一次不能超过6条
返回顶部
留言
留言
评论