1. 创造型模式,也可以叫做生成器模式,用来创建对象,<br />将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以构建不同的表示,<br />举个例子:建房子 ,都需要打地基,然后建房子,装修,流程不变,但是每个流程的具体实现细节是改变的,创建者好处就是保证了流程是不变的,不会增加也不会遗漏错误之类的,<br />角色:<br />builder:抽象接口,规范产品对象的各个组成部分的建造,规定要 实现复杂对象的那些部分的创建,并不涉及具体的对象部件的创建<br />ConcreateBuilder:实现builder 接口针对不同的商业逻辑,具体化复杂对象的各部分的创建,再建造过程完成后,提供产品的实例<br />Director:调用具体建造者来创建复杂对象的各个部分,在指导者种不涉及具体产品的信息,只负责保证对象各部分完整创建或者按某种顺序创建<br />Product:要创建复杂对象<br />通俗点将<br />创建一个产品,创建一个接口,实例化接口,实例化接口中调用产品类的方法,返回产品实例,然后建一个创造者类,调用实例化接口,按照顺序执行实例化接口的方法,返回产品实例的一个操作

    image.png

    1. <?php
    2. /**
    3. * 一个抽象类
    4. */
    5. abstract class Builder
    6. {
    7. //需求
    8. public abstract function Buildertask();
    9. //项目
    10. public abstract function Builderject();
    11. //测试
    12. public abstract function Buildertest();
    13. //上线
    14. public abstract function Builderok();
    15. }
    16. /**
    17. * 定义项目产品
    18. */
    19. class Car
    20. {
    21. //存放操作
    22. private $list=[];
    23. //添加操作
    24. public function add($get){
    25. $this->list[]=$get;
    26. }
    27. //展示
    28. public function show(){
    29. foreach ($this->list as $key => $value) {
    30. echo $value;
    31. }
    32. echo '项目完成了';
    33. }
    34. }
    35. /**
    36. * 抽象实现类A
    37. */
    38. class contentA extends Builder
    39. {
    40. private $car;
    41. function __construct()
    42. {
    43. $this->car=new Car();
    44. }
    45. //需求
    46. public function Buildertask(){
    47. $this->car->add('需求one');
    48. }
    49. //项目
    50. public function Builderject(){
    51. $this->car->add('项目one');
    52. }
    53. //测试
    54. public function Buildertest(){
    55. $this->car->add('测试one');
    56. }
    57. //上线
    58. public function Builderok(){
    59. $this->car->add('上线one');
    60. }
    61. //返回
    62. public function getcar(){
    63. return $this->car;
    64. }
    65. }
    66. /**
    67. * 抽象实现类B
    68. */
    69. class contentB extends Builder
    70. {
    71. private $car;
    72. function __construct()
    73. {
    74. $this->car=new Car();
    75. }
    76. //需求
    77. public function Buildertask(){
    78. $this->car->add('需求two');
    79. }
    80. //项目
    81. public function Builderject(){
    82. $this->car->add('项目two');
    83. }
    84. //测试
    85. public function Buildertest(){
    86. $this->car->add('测试two');
    87. }
    88. //上线
    89. public function Builderok(){
    90. $this->car->add('上线two');
    91. }
    92. //返回
    93. public function getcar(){
    94. return $this->car;
    95. }
    96. }
    97. /**
    98. * 具体调用类建造者类
    99. */
    100. class yuangang
    101. {
    102. public function insert($object)
    103. {
    104. $object->Buildertask();
    105. $object->Builderject();
    106. $object->Buildertest();
    107. $object->Builderok();
    108. return $object;
    109. }
    110. }
    111. //先new 自己需要的项目类建造者类
    112. // $object =new contentA();
    113. $object =new contentB();
    114. //实例化调用类
    115. $yuan= new yuangang();
    116. //获取项目对象
    117. $data=$object->getcar();
    118. $data->show();
    119. //insert 返回操作对象 也可以直接链式执行
    120. $yuan->insert($object)->getcar()->show();