PHP 8中的设计模式:建造者
#网络开发人员 #编程 #php #oop

嗨!
在软件开发领域,创建复杂的对象通常就像试图解决魔方。这是一个逐步的过程,其中每一步都至关重要,并且会影响最终结果。但是,如果我们有指南,那是一个可以帮助我们轻松解决这个难题的蓝图怎么办?在编程世界中,构建器模式是本指南。

建筑商模式是受人尊敬的创造设计模式家族的成员,就像是面向对象的编程世界中的大师工匠。它知道创建多方面对象的复杂性,以精致和精确的方式处理施工过程。建筑商模式的美丽在于它能够构建对象的各种表示形式的能力,同时使构造逻辑与客户端代码相比。

在本文中,我们将踏上探索构建器模式的旅程,并通过PHP 8揭示其功能。我们将深入研究其结构,了解其差异,并以现实世界的示例在行动中看到它。无论您是构建复杂的电子商务平台还是简单的博客,建筑商模式都可以是您轻松且优雅地处理复杂物体的秘密武器。

想象您正在建立一个电子商务应用程序,其中您拥有产品类。产品类有许多详细信息,例如ID,名称,价格,描述,制造商,库存,折扣等。

创建产品对象是一个多步骤和顺序过程。如果我们为每个属性创建多个构造函数,它将导致大量的构造函数参数。这被称为望远镜构造函数抗模式。

class Product
{
    public int $id;
    public string $name;
    public int $price;
    public string $description;
    public string $manufacturer;
    public string $inventory;
    public int $discount;

    public function __construct(
      int $id,
      string $name,
      int $price,
      string $description,
      string $manufacturer,
      string $inventory,
      int $discount
    )
    {
        $this->id = $id;
        $this->name = $name;
        $this->price = $price;
        $this->description = $description;
        $this->manufacturer = $manufacturer;
        $this->inventory = $inventory;
        $this->discount = $discount;
    }
}

构建器模式可以解决此问题。

class Product
{
    private $id;
    private $name;
    private $price;
    private $description;
    private $manufacturer;
    private $inventory;
    private $discount;

    public function __construct(ProductBuilder $builder)
    {
        $this->id = $builder->getId();
        $this->name = $builder->getName();
        $this->price = $builder->getPrice();
        $this->description = $builder->getDescription();
        $this->manufacturer = $builder->getManufacturer();
        $this->inventory = $builder->getInventory();
        $this->discount = $builder->getDiscount();
    }

    // getters for product details will go here
}

class ProductBuilder
{
    private $id;
    private $name;
    private $price;
    private $description;
    private $manufacturer;
    private $inventory;
    private $discount;

    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    public function setName($name)
    {
        $this->name = $name;
        return $this;
    }

    public function setPrice($price)
    {
        $this->price = $price;
        return $this;
    }

    public function setDescription($description)
    {
        $this->description = $description;
        return $this;
    }

    public function setManufacturer($manufacturer)
    {
        $this->manufacturer = $manufacturer;
        return $this;
    }

    public function setInventory($inventory)
    {
        $this->inventory = $inventory;
        return $this;
    }

    public function setDiscount($discount)
    {
        $this->discount = $discount;
        return $this;
    }

    // getters will go here

    public function build()
    {
        return new Product($this);
    }
}

在此示例中,产品建筑商类负责逐步构造产品对象。产品类本身具有带有产品构造者论点的构造函数。这样,我们确保始终以完整的状态创建产品对象。

$productBuilder = new ProductBuilder();
$product = $productBuilder
                ->setId(101)
                ->setName('iPhone 13')
                ->setPrice(999.99)
                ->setDescription('New iPhone 13 with A15 Bionic chip')
                ->setManufacturer('Apple Inc.')
                ->setInventory(1000)
                ->setDiscount(10)
                ->build();

当我们到达构建器模式的探索结束时,很明显地看到为什么它被认为是面向对象的编程世界中的基石。构建器图案优雅地解决了构建复杂物体,降低复杂性并增强我们代码的可读性的问题。

构建器模式的杰出特征之一是它可以分离对象的构造和表示的能力。这种分离不仅使我们的代码更加模块化,而且还可以提高其可维护性和可扩展性。这就像有一个私人建筑师了解我们的愿景并将其带入生活,一次(或我们的情况下是一个物体)。

在个人音符上,构建器图案在我的设计图案工具箱中占有特殊的位置。多年来,事实证明,它是一个宝贵的盟友,帮助我轻松而精确地在项目中构建复杂的对象。它的多功能性和鲁棒性使其在处理复杂的对象创建时,它是我的首选模式。就像一个值得信赖的朋友,无论手头任务多么复杂,他都不会让我失望。


P.S。如果您发现这篇文章有所帮助,并希望在 php typescript 中更深入地研究设计模式,我为您提供一些令人兴奋的消息!我目前正在写一本,它广泛涵盖了这些主题。它包含了实用的例子,清晰的解释和现实情况,可以应用这些模式。

本书旨在帮助初学者和经验丰富的开发人员对设计模式以及如何在PHP和打字稿中实施它们。无论您是想掌握知识还是学习新知识,这本书都可以覆盖您。

您可以订阅在我的博客上 dev.to.to ,然后一本书准备就绪后,您将立即收到通知。我等不及您阅读它,并将您的编码技巧提升到一个新的水平!


Ravi AvaalaUnsplash

照片