php 建造者生成器模式学习笔记

本文章来为各位整理一篇关于php建造者生成器模式学习笔记,希望这篇文章能够帮助到各位朋友哦,有兴趣的朋友可以进来看看的哦.

适用场景:

1、需要生成的产品对象有复杂的内部结构。

2、需要生成的产品对象的属性相互依赖,生成器模式可以强迫生成顺序。

3、在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

使用效果:

1、生成器模式的使用使得产品的内部表象可以独立的变化,使用生成器模式可以使客户端不必知道产品内部组成的细节.

2、每一个Builder都相对独立,而与其它的Builder无关.

3、模式所建造的最终产品更易于控制.

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. */
  5. /**具体产品角色 车
  6. * Class Car
  7. */
  8. class Car
  9. {
  10. public $_head;
  11. public $_engine;//引擎
  12. public $_tyre;//轮胎
  13. function show()
  14. {
  15. echo "车头的颜色:{$this->_head}<br/>";
  16. echo "引擎的品牌:{$this->_engine}<br/>";
  17. echo "轮胎的品牌:{$this->_tyre}<br/>";
  18. }
  19. }
  20. /**抽象车的建造者(生成器)
  21. * Class CarBuilder
  22. */
  23. abstract class CarBuilder
  24. {
  25. protected $_car;
  26. function __construct()
  27. {
  28. $this->_car=new Car();
  29. }
  30. abstract function BuildHead();
  31. abstract function BuildEngine();
  32. abstract function BuildTyre();
  33. abstract function GetCar();
  34. }
  35. /**具体车的建造者(生成器) 宝马
  36. * Class BMW
  37. */
  38. class BMW extends CarBuilder
  39. {
  40. function BuildHead()
  41. {
  42. // TODO: Implement BuilderHead() method.
  43. $this->_car->_head="Black";
  44. }
  45. function BuildEngine()
  46. {
  47. // TODO: Implement BuildEngine() method.
  48. $this->_car->_engine="BMW";
  49. }
  50. function BuildTyre()
  51. {
  52. // TODO: Implement BuildTyre() method.
  53. $this->_car->_tyre="BMW";
  54. }
  55. function GetCar()
  56. {
  57. // TODO: Implement GetCar() method.
  58. return $this->_car;
  59. }
  60. }
  61. /**别克
  62. * Class BuickBird
  63. */
  64. class BuickBird extends CarBuilder
  65. {
  66. function BuildHead()
  67. {
  68. // TODO: Implement BuildHead() method.
  69. $this->_car->_head="Red";
  70. }
  71. function BuildEngine()
  72. {
  73. // TODO: Implement BuildEngine() BMmethod.
  74. $this->_car->_engine="Buick";//
  75. }
  76. function BuildTyre()
  77. {
  78. // TODO: Implement BuildTyre() method.
  79. $this->_car->_tyre="Buick";
  80. }
  81. function GetCar()
  82. {
  83. // TODO: Implement GetCar() method.
  84. return $this->_car;
  85. }
  86. }
  87. /**指挥者
  88. * Class Director
  89. */
  90. class Director
  91. {
  92. /**
  93. * @param $_builder 建造者
  94. * @return mixed 产品类:车
  95. */
  96. function Construct($_builder)
  97. { //phpfensi.com
  98. $_builder->BuildHead();
  99. $_builder->BuildEngine();
  100. $_builder->BuildTyre();
  101. return $_builder->GetCar();
  102. }
  103. }