当前位置:首页 > 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采用哪种模式实现

Vue 采用的模式 Vue 主要采用 MVVM(Model-View-ViewModel)模式 实现数据与视图的绑定和交互。以下是其核心特点: Model(模型):代表数据层,通常是 JavaSc…

如何启用react并发模式

如何启用react并发模式

启用 React 并发模式的方法 React 并发模式(Concurrent Mode)是 React 18 引入的一项功能,允许应用在渲染过程中保持响应性。以下是启用并发模式的步骤: 安装 Rea…

ReAct模式实现原理

ReAct模式实现原理

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

react实现mvvm模式

react实现mvvm模式

React 实现 MVVM 模式的方法 MVVM(Model-View-ViewModel)是一种前端架构模式,通过数据绑定实现视图与逻辑的分离。React 本身基于单向数据流设计,但可以通过以下方式…

php实现模式

php实现模式

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