
介绍
shiyanlou:建造者模式又称为生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
角色
角色 | 说明 |
---|---|
Builder | 抽象构造者类,负责创建一个 Product 对象的各个部件指定抽象接口 |
ConcreteBuilder | 具体构造者类,实现 Builder 的接口以构造和装配该产品的各个部件 |
Director | 指挥者类,构造一个使用 Builder 接口的对象 |
Product | 产品类,表示被构造的复杂对象。ConcreateBuilder 创建该产品的内部表示并定义它的装配过程 |
角色示例
类名 | 担任角色 | 说明 |
---|---|---|
CoffeeMachine | Builder | 抽象咖啡机类,阐述制作一杯 Coffee 所需的配料 |
Nespresso | ConcreteBuilder | 胶囊咖啡机类,提供 CoffeeMachine 的所需的配料并加以制作 |
Customer | Director | 顾客类,使用 CoffeeMachine 来制作一杯 Coffee |
Coffee | Product | 咖啡类,使用 Nespresso 来制作一杯 Coffee</p> |
UML类图

代码
<?php
abstract class CoffeeMachine
{
protected $coffee;
abstract public function buildWater();
abstract public function buildCoffeeBeans();
abstract public function buildPaperCup();
abstract public function getResult();
}
class Nespresso extends CoffeeMachine
{
function __construct()
{
$this->coffee = new Coffee();
}
public function buildWater(){
$this->coffee->setWater('水');
}
public function buildCoffeeBeans(){
$this->coffee->setCoffeeBeans('咖啡豆');
}
public function buildPaperCup(){
$this->coffee->setPaperCup('纸杯');
}
public function getResult(){
return $this->coffee;
}
}
class Coffee
{
protected $water;
protected $coffeeBeans;
protected $paperCup;
public function setWater($water){
$this->water = $water;
}
public function setCoffeeBeans($coffeeBeans){
$this->coffeeBeans = $coffeeBeans;
}
public function setPaperCup($paperCup){
$this->paperCup = $paperCup;
}
public function show()
{
return "这杯咖啡由:".$this->water.'、'.$this->coffeeBeans.'和'.$this->paperCup.'组成';
}
}
class Customer
{
public $coffeeMachine;
public function startCoffeeMachine()
{
$this->coffeeMachine->buildWater();
$this->coffeeMachine->buildCoffeeBeans();
$this->coffeeMachine->buildPaperCup();
return $this->coffeeMachine->getResult();
}
public function setCoffeeMachine(CoffeeMachine $coffeeMachine)
{
$this->coffeeMachine = $coffeeMachine;
}
}
$nespresso = new Nespresso();
$customer = new Customer();
$customer->setCoffeeMachine($nespresso);
$newCoffee = $customer->startCoffeeMachine();
echo $newCoffee->show();
创建 Nespresso.php,内容如上。
执行
$ php Nespresso.php
这杯咖啡由:水、咖啡豆和纸杯组成
网友评论