当前位置:首页 > PHP

php实现工厂模式

2026-02-16 10:52:41PHP

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("Unknown product type");
        }
    }
}

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

工厂方法模式实现

<?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";
    }
}

abstract class Creator {
    abstract protected function factoryMethod();

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

class ConcreteCreatorA extends Creator {
    protected function factoryMethod() {
        return new ConcreteProductA();
    }
}

class ConcreteCreatorB extends Creator {
    protected function factoryMethod() {
        return new ConcreteProductB();
    }
}

$creatorA = new ConcreteCreatorA();
echo $creatorA->someOperation(); // 输出: Product A
?>

抽象工厂模式实现

<?php
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";
    }
}

class ConcreteProductA2 implements AbstractProductA {
    public function getName() {
        return "Product A2";
    }
}

class ConcreteProductB2 implements AbstractProductB {
    public function getName() {
        return "Product B2";
    }
}

interface AbstractFactory {
    public function createProductA();
    public function createProductB();
}

class ConcreteFactory1 implements AbstractFactory {
    public function createProductA() {
        return new ConcreteProductA1();
    }

    public function createProductB() {
        return new ConcreteProductB1();
    }
}

class ConcreteFactory2 implements AbstractFactory {
    public function createProductA() {
        return new ConcreteProductA2();
    }

    public function createProductB() {
        return new ConcreteProductB2();
    }
}

$factory1 = new ConcreteFactory1();
$productA1 = $factory1->createProductA();
echo $productA1->getName(); // 输出: Product A1
?>

使用场景建议

简单工厂模式适用于对象创建逻辑不复杂的场景。工厂方法模式将实例化推迟到子类,更符合开闭原则。抽象工厂模式适合创建一系列相关或依赖的对象家族。

注意事项

工厂模式会增加代码复杂度,应仅在对象创建逻辑确实需要封装时使用。避免过度设计,简单的new操作可能更合适简单场景。

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

相关文章

单例模式的实现PHP

单例模式的实现PHP

单例模式的基本概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。适用于需要全局唯一对象的场景,如数据库连接、日志管理等。 PHP 单例模式的实现步骤 私有化构造函数…

vue实现工厂排班

vue实现工厂排班

Vue实现工厂排班系统 数据模型设计 使用Vue的响应式数据管理排班信息,核心数据结构包括员工列表、班次类型、日期范围等。例如: data() { return { employees:…

ReAct模式实现原理

ReAct模式实现原理

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

php怎么实现单例模式

php怎么实现单例模式

单例模式的基本概念 单例模式确保一个类只有一个实例,并提供一个全局访问点。适用于需要频繁创建和销毁的对象,或控制资源访问的场景(如数据库连接、日志管理等)。 PHP 单例模式的实现步骤 私有化构…

js 实现单例模式

js 实现单例模式

使用闭包实现单例模式 闭包可以封装私有变量,确保实例唯一性。通过立即执行函数返回一个获取实例的方法,首次调用时创建实例,后续调用直接返回已创建的实例。 const Singleton = (func…

js实现工厂

js实现工厂

工厂模式的概念 工厂模式是一种创建型设计模式,用于封装对象的创建逻辑,通过统一的接口动态决定实例化哪个类。在 JavaScript 中,工厂模式常用于解耦对象创建过程,提升代码的可维护性和扩展性。…