分离复杂的表示法这种模式将一个复杂对象的构建从其表示法中分离出来使得同样的构建过程可以创建不同的表示
Product(产品)
This class (a) represents(代表) the complex object under construction. ConcreteBuilder builds the product's internal representation and defines the process by which it's assembled, and (b) includes classes that define the constituent(构成的) parts, including interfaces for assembling the parts into the final result.
(这类(a)代表了复杂对象正在建设。ConcreteBuilder构建产品的内部表示和定义装配的过程,和(b)包含定义各个组成部分的类,包括为了部件组装成最终的结果的接口。)
ConcreteBuilder(具体构建者)
This class (a) constructs and assembles parts of the product by implementing the Builder interface, (b) defines and keeps track of the representation it creates, and (c) provides an interface for retrieving(恢复) the product.
(这类(a)建造和装配被构建器接口实现的产品的零部件,(b)定义和跟踪它创建的表示法,和(c)提供了一个接口来恢复这个产品。)
Builder(构建者)
This class specifies(指定) an abstract interface for creating parts of a Product object.
(这类指定一个抽象的接口来创建一个产品对象的零部件。)
Director(导演)
This class constructs an object using the Builder interface.
(这类构造一个对象使用Builder接口。)
<?php
/**
* 抽象产品角色类
*/
abstract class abstract_Product
{
abstract public function product();
}
/**
* 具体产品类 主机产品
*/
class ComputerMainframe extends abstract_Product
{
public function product()
{
return "电脑主机产品";
}
}
/**
* 具体产品类 液晶显示器
*/
class LCD extends abstract_Product
{
public function product()
{
return "电脑液晶显示器产品";
}
}
/**
* 具体产品类 台式显示器
*/
class DonsoleDisplay extends abstract_Product
{
public function product()
{
return "电脑台式显示器产品";
}
}
/**
* 具体产品类 键盘鼠标
*/
class KeyboardMouse extends abstract_Product
{
public function product()
{
return "电脑键盘鼠标";
}
}
class ProductBuider
{
private $parts = array();
public function Add($part)
{
$this->parts[] = $part;
}
public function Show()
{
foreach ($this->parts as $value) {
echo $value->product() . "";
}
}
}
/**
* 具体建造者 台式显示机产品
*/
class DonsoleC extends abstract_Builder
{
private $product;
public function __construct()
{
$this->product = new ProductBuider();
}
public function partA()
{
$this->product->Add(new ComputerMainframe());
}
public function partB()
{
$this->product->Add(new DonsoleDisplay());
}
public function partC()
{
$this->product->Add(new KeyboardMouse());
}
public function GetResult()
{
return $this->product;
}
}
/**
* 具体建造者 液晶显示式机产品
*/
class LCDC extends abstract_Builder
{
private $product;
public function __construct()
{
$this->product = new ProductBuider();
}
public function partA()
{
$this->product->Add(new ComputerMainframe());
}
public function partB()
{
$this->product->Add(new LCD());
}
public function partC()
{
$this->product->Add(new KeyboardMouse());
}
public function GetResult()
{
return $this->product;
}
}
/**
* 抽象建造者类 (组装电脑产品必须部件)
*/
abstract class abstract_Builder
{
abstract public function partA();
abstract public function partB();
abstract public function partC();
abstract public function GetResult();
}
class Director
{
public function Construct($builder)
{
$builder->PartA();
$builder->PartB();
$builder->PartC();
}
}
$director = new Director();
$b1 = new DonsoleC();
$b2 = new LCDC();
//显示台式机
$director->Construct($b1);
$p1 = $b1->GetResult();
$p1->Show();
echo "";
//液晶台式机
$director->Construct($b2);
$p1 = $b2->GetResult();
$p1->Show();
评论