php设计模式学习系列(六)--建造者模式
2016-03-22 13:36
716 查看
声明:本系列博客参考资料《大话设计模式》,作者程杰。
建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式。
类图:
![](http://img.blog.csdn.net/20150425112113670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamhxMDExMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
建造者模式一般认为有四个角色:
1.产品角色,产品角色定义自身的组成属性
2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
建造者模式通常包括下面几个角色:
1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4. Product:要创建的复杂对象。
代码:
[php] view
plain copy
print?
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
<?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?
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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();
建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式。
类图:
建造者模式一般认为有四个角色:
1.产品角色,产品角色定义自身的组成属性
2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品
建造者模式通常包括下面几个角色:
1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。
2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。
3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。
4. Product:要创建的复杂对象。
代码:
[php] view
plain copy
print?
![](https://code.csdn.net/assets/CODE_ico.png)
<?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?
![](https://code.csdn.net/assets/CODE_ico.png)
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();
相关文章推荐
- 如何使用工具进行线上 PHP 性能追踪及分析?
- Tuning Windows Server 2008 for PHP
- PHP中strrev翻转中文乱码问题的解决办法
- Laravel进行数据库迁移(migration)
- ThinkPHP3.2无法加载控制器
- matplotlib使用
- php设计模式学习系列(五)--单例模式
- 如何使用工具进行线上 PHP 性能追踪及分析?
- Zend Framework教程之Zend_Registry对象用法分析
- 如何使用工具进行线上 PHP 性能追踪及分析?
- pure-ftpd搭建教程
- YII2 basic版文件夹描述及应用启动流程
- 【设计模式】之装饰器模式(二)-PHP
- setprecision
- PHP设计模式 观察者模式(Observer)
- PHP实现正态分布的累积概率函数
- Zend Framework实现多服务器共享SESSION数据的方法
- php 面向对象 初始化类
- windows上给yii2安装插件
- Zend Framework框架Smarty扩展实现方法