您的位置:首页 > 编程语言 > PHP开发

php设计模式学习系列(六)--建造者模式

2016-03-22 13:36 716 查看
声明:本系列博客参考资料《大话设计模式》,作者程杰。

建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式。

类图:



建造者模式一般认为有四个角色:

1.产品角色,产品角色定义自身的组成属性

2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品

3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义

4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品

建造者模式通常包括下面几个角色:

1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

4. Product:要创建的复杂对象。

代码:

[php] view
plain copy

print?





<?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();

}

}

调用客户端测试代码:

[php] view
plain copy

print?





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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: