声明:本系列博客参考资料《大话设计模式》,作者程杰。
建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式。
类图:
建造者模式一般认为有四个角色:
1.产品角色,产品角色定义自身的组成属性
2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
建造者模式通常包括下面几个角色:
1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4. Product:要创建的复杂对象。
代码:
- <?php
- /**
- * Created by PhpStorm.
- * User: Jiang
- * Date: 2015/4/25
- * Time: 9:31
- */
- /**具体产品角色 鸟类
- * Class Bird
- */
- class Bird
- {
- public $_head;
- public $_wing;
- public $_foot;
- function show()
- {
- echo "头的颜色:{$this->_head}<br/>";
- echo "翅膀的颜色:{$this->_wing}<br/>";
- echo "脚的颜色:{$this->_foot}<br/>";
- }
- }
- /**抽象鸟的建造者(生成器)
- * Class BirdBuilder
- */
- abstract class BirdBuilder
- {
- protected $_bird;
- function __construct()
- {
- $this->_bird=new Bird();
- }
- abstract function BuildHead();
- abstract function BuildWing();
- abstract function BuildFoot();
- abstract function GetBird();
- }
- /**具体鸟的建造者(生成器) 蓝鸟
- * Class BlueBird
- */
- class BlueBird extends BirdBuilder
- {
- function BuildHead()
- {
- // TODO: Implement BuilderHead() method.
- $this->_bird->_head="Blue";
- }
- function BuildWing()
- {
- // TODO: Implement BuilderWing() method.
- $this->_bird->_wing="Blue";
- }
- function BuildFoot()
- {
- // TODO: Implement BuilderFoot() method.
- $this->_bird->_foot="Blue";
- }
- function GetBird()
- {
- // TODO: Implement GetBird() method.
- return $this->_bird;
- }
- }
- /**玫瑰鸟
- * Class RoseBird
- */
- class RoseBird extends BirdBuilder
- {
- function BuildHead()
- {
- // TODO: Implement BuildHead() method.
- $this->_bird->_head="Red";
- }
- function BuildWing()
- {
- // TODO: Implement BuildWing() method.
- $this->_bird->_wing="Black";
- }
- function BuildFoot()
- {
- // TODO: Implement BuildFoot() method.
- $this->_bird->_foot="Green";
- }
- function GetBird()
- {
- // TODO: Implement GetBird() method.
- return $this->_bird;
- }
- }
- /**指挥者
- * Class Director
- */
- class Director
- {
- /**
- * @param $_builder 建造者
- * @return mixed 产品类:鸟
- */
- function Construct($_builder)
- {
- $_builder->BuildHead();
- $_builder->BuildWing();
- $_builder->BuildFoot();
- return $_builder->GetBird();
- }
- }
调用客户端测试代码:
- header("Content-Type:text/html;charset=utf-8");
- //------------------------生成器模式测试代码------------------
- require_once "./Builder/Builder.php";
- $director=new Director();
- echo "蓝鸟的组成:<hr/>";
- $blue_bird=$director->Construct(new BlueBird());
- $blue_bird->Show();
- echo "<br/>Rose鸟的组成:<hr/>";
- $rose_bird=$director->Construct(new RoseBird());
- $rose_bird->Show();