当前位置:首页 > PHP

php 工厂模式 实现

2026-02-15 07:27:56PHP

工厂模式简介

工厂模式是一种创建型设计模式,用于在不暴露具体实现逻辑的情况下创建对象。通过定义一个公共接口或抽象类来创建对象,子类决定实例化哪个类。PHP中常用简单工厂、工厂方法和抽象工厂三种实现方式。

php 工厂模式 实现

简单工厂模式

通过一个工厂类根据传入参数动态决定创建哪种产品类的实例。

php 工厂模式 实现

interface Product {
    public function getName();
}

class ConcreteProductA implements Product {
    public function getName() {
        return "Product A";
    }
}

class ConcreteProductB implements Product {
    public function getName() {
        return "Product B";
    }
}

class SimpleFactory {
    public function createProduct($type) {
        switch ($type) {
            case 'A':
                return new ConcreteProductA();
            case 'B':
                return new ConcreteProductB();
            default:
                throw new InvalidArgumentException("Invalid product type");
        }
    }
}

// 使用示例
$factory = new SimpleFactory();
$productA = $factory->createProduct('A');
echo $productA->getName(); // 输出: Product A

工厂方法模式

定义一个创建对象的接口,让子类决定实例化哪个类。核心是延迟实例化到子类。

interface Product {
    public function getName();
}

class ConcreteProductA implements Product {
    public function getName() {
        return "Product A";
    }
}

class ConcreteProductB implements Product {
    public function getName() {
        return "Product B";
    }
}

abstract class Creator {
    abstract public function factoryMethod(): Product;

    public function someOperation() {
        $product = $this->factoryMethod();
        return $product->getName();
    }
}

class ConcreteCreatorA extends Creator {
    public function factoryMethod(): Product {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    public function factoryMethod(): Product {
        return new ConcreteProductB();
    }
}

// 使用示例
$creatorA = new ConcreteCreatorA();
echo $creatorA->someOperation(); // 输出: Product A

抽象工厂模式

提供一个创建一系列相关或依赖对象的接口,而无需指定具体类。适用于产品族场景。

interface AbstractProductA {
    public function getName();
}

interface AbstractProductB {
    public function getName();
}

class ConcreteProductA1 implements AbstractProductA {
    public function getName() {
        return "Product A1";
    }
}

class ConcreteProductB1 implements AbstractProductB {
    public function getName() {
        return "Product B1";
    }
}

interface AbstractFactory {
    public function createProductA(): AbstractProductA;
    public function createProductB(): AbstractProductB;
}

class ConcreteFactory1 implements AbstractFactory {
    public function createProductA(): AbstractProductA {
        return new ConcreteProductA1();
    }
    public function createProductB(): AbstractProductB {
        return new ConcreteProductB1();
    }
}

// 使用示例
$factory = new ConcreteFactory1();
$productA = $factory->createProductA();
$productB = $factory->createProductB();
echo $productA->getName(); // 输出: Product A1
echo $productB->getName(); // 输出: Product B1

模式选择建议

  • 简单工厂:适合对象创建逻辑简单且变化少的场景
  • 工厂方法:需要扩展性强,支持新增产品类型
  • 抽象工厂:需要创建多个相关联的产品族

所有实现均遵循依赖倒置原则,客户端代码只依赖抽象接口,与具体实现解耦。

标签: 工厂模式
分享给朋友:

相关文章

vue路由实现模式

vue路由实现模式

Vue路由实现模式 Vue Router 提供了两种路由实现模式:Hash 模式和 History 模式。两种模式的主要区别在于 URL 的表现形式以及后端支持的需求。 Hash 模式 Hash 模…

vue实现发布订阅模式

vue实现发布订阅模式

发布订阅模式简介 发布订阅模式(Pub-Sub)是一种消息通信模式,发布者(Publisher)和订阅者(Subscriber)通过事件中心(Event Bus)解耦。Vue 本身基于观察者模式实现响…

react的并发模式该如何使用

react的并发模式该如何使用

React 并发模式简介 React 的并发模式(Concurrent Mode)是一组新特性,旨在提升应用的响应速度和用户体验。它通过可中断渲染、优先级调度和时间切片(Time Slicing)等机…

ReAct模式实现原理

ReAct模式实现原理

ReAct模式的基本概念 ReAct(Reasoning and Acting)是一种结合推理(Reasoning)和行动(Acting)的智能决策框架,旨在通过动态交互提升模型的任务解决能力。其核心…

php实现模式

php实现模式

PHP 实现设计模式的方法 设计模式是解决特定问题的可重用方案,PHP 中实现设计模式可以提升代码的可维护性和扩展性。以下是几种常见设计模式的实现方式。 单例模式 单例模式确保一个类只有一个实例,并…

php调试模式实现

php调试模式实现

PHP调试模式实现方法 开启PHP调试模式可以帮助开发者在开发过程中快速定位和解决问题。以下是几种常见的实现方法: 使用ini_set函数动态开启 在PHP脚本中动态开启错误报告和显示错误: in…