当前位置:首页 > 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

模式选择建议

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

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

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

相关文章

php实现单例模式

php实现单例模式

单例模式的概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。这种模式常用于数据库连接、日志记录器等需要全局唯一实例的场景。 PHP实现单例模式的关键步骤 私有化构造函…

react的并发模式该如何使用

react的并发模式该如何使用

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

ReAct模式实现原理

ReAct模式实现原理

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

js实现单例模式

js实现单例模式

单例模式的基本概念 单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。在JavaScript中,可以通过多种方式实现单例模式。 使用对象字面量 最简单的单例实现方式是直接使用对象字面…

js实现暗黑模式

js实现暗黑模式

使用CSS变量实现暗黑模式 通过CSS变量定义主题颜色,JavaScript切换变量值实现暗黑/亮色模式切换。这种方法维护方便,只需修改少量CSS变量。 :root { --bg-col…

uniapp生产模式

uniapp生产模式

uniapp生产模式配置与优化 环境配置 确保HBuilderX版本为最新稳定版,安装必要的插件和依赖。检查manifest.json文件中的基础配置,包括应用名称、版本号、图标等基础信息。 修改项…