嗨!
在软件开发领域,创建复杂的对象通常就像试图解决魔方。这是一个逐步的过程,其中每一步都至关重要,并且会影响最终结果。但是,如果我们有指南,那是一个可以帮助我们轻松解决这个难题的蓝图怎么办?在编程世界中,构建器模式是本指南。
建筑商模式是受人尊敬的创造设计模式家族的成员,就像是面向对象的编程世界中的大师工匠。它知道创建多方面对象的复杂性,以精致和精确的方式处理施工过程。建筑商模式的美丽在于它能够构建对象的各种表示形式的能力,同时使构造逻辑与客户端代码相比。
在本文中,我们将踏上探索构建器模式的旅程,并通过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 ,然后一本书准备就绪后,您将立即收到通知。我等不及您阅读它,并将您的编码技巧提升到一个新的水平!
照片