建造者模式
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。
模式结构
建造者模式包含如下角色:
- Builder:抽象建造者
- ConcreteBuilder:具体建造者
- Director:指挥者
- Product:产品角色
结构图
PHP代码实现
<?php
/**
* 建造者模式
*/
//Product:产品角色
class Product
{
public function Add($part){
$this->parts[]=$part;
}
public function show(){
var_dump('产品创建');
foreach ($this->parts as $part){
var_dump($part);
}
}
}
//Builder:抽象建造者
interface Builder
{
public function BuildPartA();
public function BuildPartB();
public function GetResult();
}
//ConcreteBuilder:具体建造者
class ConcreteBuilder1 implements Builder
{
public function __construct(){
$this->product=new Product();
}
public function BuildPartA()
{
$this->product->Add('部件A');
}
public function BuildPartB()
{
$this->product->Add('部件B');
}
public function GetResult()
{
return $this->product;
}
}
class ConcreteBuilder2 implements Builder
{
public function __construct(){
$this->product=new Product();
}
public function BuildPartA()
{
$this->product->Add('部件X');
}
public function BuildPartB()
{
$this->product->Add('部件Y');
}
public function GetResult()
{
return $this->product;
}
}
//Director:指挥者
class Director
{
public function Construct($builder){
$builder->BuildPartA();
$builder->BuildPartB();
}
}
$a=new Director();
$b1=new ConcreteBuilder1();
$b2=new ConcreteBuilder2();
$a->Construct($b1);
$p1=$b1->GetResult();
$p1->show();
$a->Construct($b2);
$p2=$b2->GetResult();
$p2->show();
运行结果
string '产品创建' (length=12)
string '部件A' (length=7)
string '部件B' (length=7)
string '产品创建' (length=12)
string '部件X' (length=7)
string '部件Y' (length=7)