建造者模式主要在于创建一些复杂的对象。将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式;

结构图:

<?php
/**
*
* 产品本身
*/
class Product {
private $_parts;
public function __construct() { $this->_parts = array(); }
public function add($part) { return array_push($this->_parts, $part); }
} /**
* 建造者抽象类
*
*/
abstract class Builder {
public abstract function buildPart1();
public abstract function buildPart2();
public abstract function getResult();
} /**
*
* 具体建造者
* 实现其具体方法
*/
class ConcreteBuilder extends Builder {
private $_product;
public function __construct() { $this->_product = new Product(); }
public function buildPart1() { $this->_product->add("Part1"); }
public function buildPart2() { $this->_product->add("Part2"); }
public function getResult() { return $this->_product; }
}
/**
*
*导演者
*/
class Director {
public function __construct(Builder $builder) {
$builder->buildPart1();//导演指挥具体建造者生产产品
$builder->buildPart2();
}
} // client
$buidler = new ConcreteBuilder();
$director = new Director($buidler);
$product = $buidler->getResult();
echo "<pre>";
var_dump($product);
echo "</pre>";
/*输出: object(Product)#2 (1) {
["_parts":"Product":private]=>
array(2) {
[0]=>string(5) "Part1"
[1]=>string(5) "Part2"
}
} */
?>

最新文章

  1. Java核心技术点之多线程
  2. exgcd,求乘法逆元
  3. Webpack 之 Loader 的使用
  4. ArrayList和LinkedList的几种循环遍历方式及性能对比分析(转)
  5. Nginx-SSI
  6. C#多线程与UI响应 跨线程更新UI
  7. apache 多站点搭建
  8. jquery 的attr()方法解析
  9. [TYVJ] P1027 木瓜地
  10. Android中适用于ListView、GridView等组件的通用Adapter
  11. 对Java原子类AtomicInteger实现原理的一点总结
  12. 蓝桥杯刷题,第四界省赛B组
  13. 关于servelt的相关介绍
  14. SQLServer Always On FCI 脑裂及可疑状态修复
  15. Java并发编程之volatile关键字
  16. leetcode的注意点
  17. flask_admin 笔记五 内置模板设置
  18. Android6.0------权限申请管理(单个权限和多个权限申请)
  19. js 字符串和数组注意点
  20. c++封装继承多态

热门文章

  1. 按键精灵PC端脚本
  2. php+tcpdf如何把生成的pdf文件保存在服务端
  3. The BEST way for YOU to learn English,https://www.youtube.com/watch?v=508wFMG9ZP4
  4. BZOJ 4764: 弹飞大爷 LCT
  5. Switch ……case语句
  6. TODO list(咕咕咕。。。
  7. mysql 修改字段名称以及长度
  8. mysql 组合聚集函数
  9. iostat参数说明
  10. leetcode 10. Regular Expression Matching 、44. Wildcard Matching