经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
PHP设计模式—建造者模式
来源:cnblogs  作者:幽篁晓筑  时间:2021/4/12 9:54:52  对本文有异议

 

定义:

建造者模式(Builder):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

 

结构:

  • Builder:抽象建造者类,为创建一个 Product 对象的各个部件指定的抽象接口。
  • Director:指挥者类,构建一个使用 Builder 接口的对象
  • ConcreteBuilder:具体建造者类,实现 Builder 接口,构造和装配各个部件。
  • Product:产品类,由多个部件组成。
  • Client:客户端代码。

 

代码实例:

  1. /**
  2. * 产品类,定义产品各部件
  3. * Class Product
  4. */
  5. class Product
  6. {
  7. /**
  8. * 名称
  9. */
  10. public $name;
  11. /**
  12. * 尺寸
  13. */
  14. public $size;
  15. /**
  16. * 颜色
  17. */
  18. public $colour;
  19. /**
  20. * 产品展示
  21. */
  22. public function show()
  23. {
  24. echo "产品名称:{$this->name}<br/>产品尺寸:{$this->size}<br/>产品颜色:{$this->colour}";
  25. }
  26. }
  27. /**
  28. * 抽象建造者类,定义产品各部件的抽象方法
  29. */
  30. abstract class Builder
  31. {
  32. public $product;
  33. public function __construct()
  34. {
  35. $this->product = new Product();
  36. }
  37. abstract public function name();
  38. abstract public function size();
  39. abstract public function colour();
  40. abstract public function getProduct();
  41. }
  42. /**
  43. * 具体建造者类A
  44. * Class ConcreteBuilderA
  45. */
  46. class ConcreteBuilderA extends Builder
  47. {
  48. public function name()
  49. {
  50. // TODO: Implement name() method.
  51. $this->product->name = '产品A';
  52. }
  53. public function size()
  54. {
  55. // TODO: Implement size() method.
  56. $this->product->size = '20';
  57. }
  58. public function colour()
  59. {
  60. // TODO: Implement colour() method.
  61. $this->product->colour = '白色';
  62. }
  63. public function getProduct()
  64. {
  65. // TODO: Implement getProduct() method.
  66. return $this->product;
  67. }
  68. }
  69. /**
  70. * 具体建造者类B
  71. * Class ConcreteBuilderB
  72. */
  73. class ConcreteBuilderB extends Builder
  74. {
  75. public function name()
  76. {
  77. // TODO: Implement name() method.
  78. $this->product->name = '产品B';
  79. }
  80. public function size()
  81. {
  82. // TODO: Implement size() method.
  83. $this->product->size = '30';
  84. }
  85. public function colour()
  86. {
  87. // TODO: Implement colour() method.
  88. $this->product->colour = '黑色';
  89. }
  90. public function getProduct()
  91. {
  92. // TODO: Implement getProduct() method.
  93. return $this->product;
  94. }
  95. }
  96. /**
  97. * 指挥者
  98. * Class Director
  99. */
  100. class Director
  101. {
  102. /**
  103. * 指挥构造过程
  104. * @param Builder $builder
  105. */
  106. public function construct(Builder $builder)
  107. {
  108. $builder->name();
  109. $builder->size();
  110. $builder->colour();
  111. return $builder->getProduct();
  112. }
  113. }
  114. // 客户端调用
  115. // 指挥者
  116. $director = new Director();
  117. // 产品A建造
  118. $productA = new ConcreteBuilderA();
  119. $directorA = $director->construct($productA);
  120. $directorA->show();
  121. echo "<br/>--------------------------------<br/>";
  122. // 产品B建造
  123. $productB = new ConcreteBuilderB();
  124. $directorB = $director->construct($productB);
  125. $directorB->show();
  126. // 结果
  127. 产品名称:产品A
  128. 产品尺寸:20
  129. 产品颜色:白色
  130. --------------------------------
  131. 产品名称:产品B
  132. 产品尺寸:30
  133. 产品颜色:黑色

 

总结:

  • 建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
  • 使用建造者模式,用户就只需要指定需要建造的类型就可以得到它们,而建造的具体过程和细节可以不用知道。
  • 建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。
  • 建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

 

原文链接:http://www.cnblogs.com/woods1815/p/14643006.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号