建造者模式,也可以叫做生成器模式,builder这个词的原意就包含了建筑者、开发者、创建者的含义。很明显,这个模式又是一个创建型的模式,用来创建对象。那么它的特点是什么呢?从建筑上来说,盖房子不是一下子就马上能把一个房子盖好的,而是通过一砖一瓦搭建出来的。一个房子不仅有砖瓦,还有各种管道,各种电线等等,由它们各个不部分共同组成了一栋房子。可以说,建造者模式就是这样非常形象的由各种部件来组成一个对象(房子)的过程。
Gof类图及解释
GoF定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
GoF类图
代码实现
class Product
{
private $parts = [];
public function Add(String $part): void
{
$this->parts[] = $part;
}
public function Show(): void
{
echo PHP_EOL . '产品创建 ----', PHP_EOL;
foreach ($this->parts as $part) {
echo $part, PHP_EOL;
}
}
}
产品类,你可以把它想象成我们要建造的房子。这时的房子还没有任何内容,我们需要给它添砖加瓦。
interface Builder
{
public function BuildPartA(): void;
public function BuildPartB(): void;
public function GetResult(): Product;
}
class ConcreteBuilder1 implements Builder
{
private $product;
public function __construct()
{
$this->product = new Product();
}
public function BuildPartA(): void
{
$this->product->Add('部件A');
}
public function BuildPartB(): void
{
$this->product->Add('部件B');
}
publ