一,建造者模式,也叫做生成器模式,是创建设计模式的一种,它能将一个复杂的对象的创建过程分离开来,使你能够分步骤的创建对象。建造者模式也允许你使用相同的建造代码创造出不同类型和形式的对象。
建造者模式一般包括四个角色
- 产品角色,产品角色定义自身的组成属性
- 抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品,所规范的方法中必须包括建造方法和结果返回方法
- 具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
- 指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
二,例子
//产品角色
class Product
{private $name;private $color;public function name($name): void{$this->name=$name;}public function color($color): void{$this->color=$color;}
}//抽象建造者角色
abstract class AbstractBuilder
{protected $product;//可以放到具体建造者中实现function __construct(){$this->product = new Product();}public abstract function setName();public abstract function setColor();//可以放到具体建造者中实现public function getResult(){return $this->product;}
}//具体建造者A
class BuilderA extends AbstractBuilder
{public function setName(){$this->product->name('产品A');}public function setColor(){$this->product->color('黑色');}
}//具体建造者B
class BuilderB extends AbstractBuilder
{public function setName(){$this->product->name('产品B');}public function setColor(){$this->product->color('白色');}
}//指挥者/导演者/构造器
class Director
{public function make(AbstractBuilder $builder){$builder->setName();$builder->setColor();return $builder->getResult();}
}//客户端
$director = new Director;
$builderA = new BuilderA();
$res1=$director->make($builderA);
var_dump($res1);$builderB = new BuilderB();
$res2=$director->make($builderB);
var_dump($res2);