你好,开发人员!
今天,我们将深入研究简单的工厂模式。这种模式虽然不正式被公认为是正式的设计模式,但是面向对象的编程中常用的成语,它提供了一种封装特定类型对象的实例化的方法。
简单的工厂模式就是创建对象而不将创建逻辑公开给客户端并使用公共接口引用新创建的对象。它被称为“简单工厂”,因为它易于理解和实现。从本质上讲,这是一个单一的类,充当创建其他对象的工厂。
简单的工厂模式背后的主要思想是创建对象,而无需指定将要创建的对象的确切类别。这是通过调用在接口中指定并由子类实现的工厂方法来创建对象的方法,或者在基类中实现的,并被派生的类覆盖而不是通过调用构造函数。
。想象我们正在建立一个物流管理系统,该系统需要支持卡车,船舶和飞机等多种运输工具。我们可以使用简单的工厂模式根据物流要求创建适当的运输类型。
interface Transport
{
public function deliver();
}
在此示例中,传输是所有运输类型的常见接口。
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"),
};
}
}
卡车,船和 plane 是实现运输接口的具体类。 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
您可以看到,简单的工厂模式使我们能够在不知道具体类的情况下创建不同类型的传输对象。这使我们的代码更加灵活,更易于维护。
要结束,当您需要集中创建相似类型的对象时,简单的工厂模式是一种方便的工具。它简化了代码并使其更可读和可维护。
P.S。如果您发现这篇文章有所帮助,并希望在 php 和 typescript 中更深入地研究设计模式,我为您提供一些令人兴奋的消息!我目前正在写一本书,它广泛涵盖了这些主题。它包含了实用的例子,清晰的解释和现实情况,可以应用这些模式。
本书旨在帮助初学者和经验丰富的开发人员对设计模式以及如何在PHP和打字稿中实施它们。无论您是想掌握知识还是学习新知识,这本书都可以覆盖您。
您可以订阅在我的博客上 dev.to.to 或在linkedin上连接,然后一本书准备就绪后,您将立即收到通知。我等不及您阅读它,并将您的编码技巧提升到一个新的水平!
弗朗斯·范·海登(Frans van Heerden)照片:Abioqian2