练代码,增加了调用时的输出。

  1. <?php
  2. /*
  3. The builder pattern separates the construction of a complex object from its
  4. representation, making it possible for the same construction process to create
  5. different representations. While some creational patterns construct a product
  6. in one call, builder pattern does it step by step under the control of the director.
  7. */
  8.  
  9. class Car {
  10. private $wheels;
  11. private $color;
  12.  
  13. public function getWheels() {
  14. echo 'Car_getWheels<br/>';
  15. return $this->wheels;
  16. }
  17.  
  18. public function setWheels($weels) {
  19. echo 'Car_setWheels<br/>';
  20. $this->wheels = $weels;
  21. }
  22.  
  23. public function getColor() {
  24. echo 'Car_getColor<br/>';
  25. return $this->color;
  26. }
  27.  
  28. public function setColor($color) {
  29. echo 'Car_setColor<br/>';
  30. $this->color = $color;
  31. }
  32.  
  33. public function __toString() {
  34. return 'Color: ' . $this->color . '. Wheels: ' . $this->wheels;
  35. }
  36.  
  37. }
  38.  
  39. interface CarBuilderInterface {
  40. public function setColor($color);
  41. public function setWheels($wheels);
  42. public function getResult();
  43. }
  44.  
  45. class CarBuilder implements CarBuilderInterface {
  46. private $car;
  47.  
  48. public function __construct() {
  49. echo 'CarBuilder__construct<br/>';
  50. $this->car = new Car();
  51. }
  52.  
  53. public function setColor($color){
  54. echo 'CarBuilder_setColor<br/>';
  55. $this->car->setColor($color);
  56. return $this;
  57. }
  58. public function setWheels($wheels){
  59. echo 'CarBuilder_setWheels<br/>';
  60. $this->car->setWheels($wheels);
  61. return $this;
  62. }
  63. public function getResult(){
  64. echo 'CarBuilder_getResult<br/>';
  65. return $this->car;
  66. }
  67. }
  68.  
  69. class CarBuilderDirector {
  70. private $builder;
  71.  
  72. public function __construct(CarBuilder $builder) {
  73. echo 'CarBuilderDirector__construct<br/>';
  74. $this->builder = $builder;
  75. }
  76.  
  77. public function build() {
  78. echo 'CarBuilderDirector__build<br/>';
  79. $this->builder->setColor('Red');
  80. $this->builder->setWheels(4);
  81. return $this;
  82. }
  83.  
  84. public function getCar() {
  85. echo 'CarBuilderDirector__getCar<br/>';
  86. return $this->builder->getResult();
  87. }
  88. }
  89.  
  90. $carBuilder = new CarBuilder();
  91. $carBuilderDirector = new CarBuilderDirector($carBuilder);
  92. $car = $carBuilderDirector->build()->getCar();
  93. echo $car;
  94.  
  95. ?>

输出

  1. CarBuilder__construct
  2. CarBuilderDirector__construct
  3. CarBuilderDirector__build
  4. CarBuilder_setColor
  5. Car_setColor
  6. CarBuilder_setWheels
  7. Car_setWheels
  8. CarBuilderDirector__getCar
  9. CarBuilder_getResult
  10. Color: Red. Wheels: 4

php构建型模式(Builder pattern)的更多相关文章

  1. 构建者模式(Builder pattern)

    构建者模式应用场景: 主要用来构建一些复杂对象,这里的复杂对象比如说:在建造大楼时,需要先打牢地基,搭建框架,然后自下向上地一层一层盖起来.通常,在建造这种复杂结构的物体时,很难一气呵成.我们需要首先 ...

  2. 【设计模式】建造者模式 Builder Pattern

    前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...

  3. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  4. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  5. 建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...

  6. 二十四种设计模式:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...

  7. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  8. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  9. Net设计模式实例之建造者模式(Builder Pattern)

    一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...

随机推荐

  1. 【技术博客】Postman接口测试教程 - 环境、附加验证、文件上传测试

    Postman接口测试教程 - 环境.附加验证.文件上传测试 v1.0 作者:ZBW 前言 继利用Postman和Jmeter进行接口性能测试之后,我们发现Postman作为一款入门容易的工具,其内置 ...

  2. oracle 之 using 使用

    oracle  中 using关键字使用规则: 1.查询必须是等值连接.2.等值连接中的列必须具有相同的名称和数据类型. 使用using关键字简化连接时,需要注意以下几点:1.使用 table1表和 ...

  3. 深入理解JVM-类加载初始化阶段-类的主动与被动引用

    JVM的类加载阶段中初始化阶段 P210 虚拟机规定的五种情况必须对类的“初始化”情况 1.遇到new.getstatic.putstatic.或invokestic 四条字节码指令时,如果类没有经过 ...

  4. Linux下多网卡绑定bond0及模式

    Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0:平衡负载模式,有自动备援,但 ...

  5. Jenkins工具学习(一)

    Jenkins的下载及安装 Jenkins下载地址:https://jenkins.io/download/ 下载后的直接解压安装 根据自己的喜好选择一种方式安装: 如果选择推荐安装,会自动下载一些插 ...

  6. 用ADB 抓取和存储APP日志方法

    前置条件:电脑已经安装好adb (一)  进入adb目录下连接手机,检测出手机 CD 到SDK的platform-tools (二)adb logcat-c  清除日志  (三)adb  logcat ...

  7. 小知识点 之 JVM -XX:SurvivorRatio

    JVM参数之-XX:SurvivorRatio 最近面试过程中遇到一些问JVM参数的,本着没用过去学习的办法看了些博客写得不准确,参考oracle的文档记录一下,争取每天记录一点知识点 -XX:Sur ...

  8. 『正睿OI 2019SC Day4』

    总结 今天是一场欢乐的\(ACM\)比赛,于是我队得到了全场倒数的好排名. 好吧,其实还是怪自己不能怪队友啦.对于\(ACM\),可能最主要的还是经验不足,导致比赛的时候有点紧张.虽然队友为了磕一道题 ...

  9. Echarts 学习系列(2)-常见的静态ECharts图

    目录 写在前面 折线(面积)图 1.折线图 2.堆叠折线图 3.堆积面积图 柱状(条形)图 1.柱状图 2.条形图 3.堆积条形图 饼(圆环)图 1.饼图 2.环形图 3.南丁格尔图 写在前面 上一小 ...

  10. docker学习之路-nginx镜像(翻译)

    本篇来自https://hub.docker.com/_/nginx/?tab=description 它是docker hub上nginx的官方网站,上面有关于nginx的使用描述等.从这里你可以找 ...