PHP 8 中的设计模式:简单工厂

2025-06-07

PHP 8 中的设计模式:简单工厂

大家好,各位开发者!🧑🏼‍💻

今天,我们将深入探讨简单工厂模式。虽然这种模式尚未被正式认可为正式的设计模式,但它是面向对象编程中常用的惯用手法,它提供了一种封装特定类型对象实例化的方法。

简单工厂模式的核心在于创建对象时不向客户端暴露创建逻辑,而是使用通用接口引用新创建的对象。它之所以被称为“简单工厂”,是因为它易于理解和实现。它本质上是一个单一的类,充当创建其他对象的工厂。

简单工厂模式的核心思想是创建对象时无需指定具体类。创建对象时,通过调用工厂方法(接口中指定并由子类实现,或者基类实现并可选地由派生类重写)来创建对象,而不是调用构造函数。

假设我们正在构建一个物流管理系统,需要支持多种运输方式,例如卡车、轮船和飞机。我们可以使用简单工厂模式根据物流需求创建合适的运输方式。

interface Transport
{
    public function deliver();
}
Enter fullscreen mode Exit fullscreen mode

在这个例子中,Transport是所有传输类型的通用接口。

class Truck implements Transport
{
    public function deliver()
    {
        return "Delivery by road in a box";
    }
}

class Ship implements Transport
{
    public function deliver() {
        return "Delivery by sea in a container";
    }
}

class Plane implements Transport
{
    public function deliver() {
        return "Delivery by air in a cargo";
    }
}

class TransportFactory
{
    public function createTransport($type)
    {
        return match ($type) {
            'truck' => new Truck(),
            'ship' => new Ship(),
            'plane' => new Plane(),
            default => throw new Exception("Invalid transport type"),
        };
    }
}
Enter fullscreen mode Exit fullscreen mode

TruckShipPlane是实现了Transport接口的具体类TransportFactory是一个简单工厂,它根据类型创建合适的运输方式。

现在,让我们看看如何使用我们的简单工厂:

$factory = new TransportFactory();

$transport = $factory->createTransport('truck');
echo $transport->deliver(); // Outputs: Delivery by road in a box

$transport = $factory->createTransport('ship');
echo $transport->deliver(); // Outputs: Delivery by sea in a container

$transport = $factory->createTransport('plane');
echo $transport->deliver(); // Outputs: Delivery by air in a cargo
Enter fullscreen mode Exit fullscreen mode

如你所见,简单工厂模式允许我们创建不同类型的传输对象,而无需了解具体的类。这使得我们的代码更加灵活且易于维护。

总而言之,当你需要集中创建类似类型的对象时,简单工厂模式是一个方便的工具。它简化了代码,使其更具可读性和可维护性。


附言:各位开发者,如果您觉得本文很有价值,并且渴望加深对 PHP 和 TypeScript 设计模式的理解,我有个激动人心的消息要告诉您!我正在撰写一本内容全面的书,深入探讨这些主题,书中充满了实际的例子、清晰的解释以及这些模式的实际应用。

本书面向新手和经验丰富的开发人员,旨在加深您对 PHP 和 TypeScript 设计模式的理解和实践。无论您是想复习现有知识,还是探索新的学习领域,本书都是您的理想伴侣。

此外,您的订阅将在支持本书的完成中发挥关键作用,使我能够继续为您提供优质内容,将您的编码能力提升到前所未有的高度。

欢迎订阅我在dev.to上的博客,以便定期获取更新。我期待与您携手踏上这段旅程,助您将编程技能提升到新的高度!


Frans van Heerden 拍摄:https://www.pexels.com/photo/grayscale-photography-of-locomotive-train-beside-factory-682078/

文章来源:https://dev.to/zhukmax/design-patterns-in-php-8-simple-factory-o0l
PREV
PHP 8 中的设计模式:单例模式和多例模式
NEXT
PHP 8 中的设计模式:享元模式