当前位置:首页 > 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的响应式数据管理排班信息,核心数据结构包括员工列表、班次类型、日期范围等。例如: data() { return { employees:…

vue实现发布订阅模式

vue实现发布订阅模式

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

php调试模式实现

php调试模式实现

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

访问者模式js实现

访问者模式js实现

访问者模式概述 访问者模式是一种行为设计模式,允许在不修改对象结构的情况下定义新的操作。它将算法与对象结构分离,通过“访问者”对象实现多态行为。 核心组件 Visitor(访问者):声明…

js实现模式

js实现模式

实现模式的基本概念 在JavaScript中,实现模式指的是用于解决特定问题的可重用设计模板或代码结构。这些模式帮助开发者编写更高效、可维护的代码。 常见JavaScript实现模式 单例模式…

uniapp生产模式

uniapp生产模式

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