当前位置:首页 > PHP

php实现工厂模式

2026-02-16 10:52:41PHP

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实现工厂模式

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

相关文章

vue实现发布订阅模式

vue实现发布订阅模式

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

vue采用哪种模式实现

vue采用哪种模式实现

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

如何启用react并发模式

如何启用react并发模式

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

react的并发模式该如何使用

react的并发模式该如何使用

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

ReAct模式实现原理

ReAct模式实现原理

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

php怎么实现单例模式

php怎么实现单例模式

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