当前位置:首页 > 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 单例模式的实现步骤 私有化构造函数…

php实现单例模式

php实现单例模式

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

如何启用react并发模式

如何启用react并发模式

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

react的并发模式该如何使用

react的并发模式该如何使用

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

php怎么实现单例模式

php怎么实现单例模式

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

php实现模式

php实现模式

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