若转载教程,请注明出自SW-X框架官方文档!

    1. <?php
    2. /**
    3. * 设计模式之建造者模式
    4. * 小黄牛
    5. */
    6. header("Content-type: text/html; charset=utf-8");
    7. /**
    8. * 实体 - 产品角色 - 汽车
    9. */
    10. class Car{
    11. public $_head; // 车头
    12. public $_door; // 车门
    13. public $_foot; // 车尾
    14. public function show(){
    15. echo "车头的颜色:{$this->_head}<br/>";
    16. echo "车门的颜色:{$this->_door}<br/>";
    17. echo "车尾的颜色:{$this->_foot}<br/>";
    18. }
    19. }
    20. /**
    21. * 抽象 - 汽车的建造者
    22. */
    23. abstract class CarBuilder{
    24. protected $_car; // 汽车实例
    25. public function __construct(){
    26. $this->_car = new Car();
    27. }
    28. abstract function BuildHead(); // 改变车头颜色
    29. abstract function BuildDoor(); // 改变车门颜色
    30. abstract function BuildFoot(); // 改变车尾颜色
    31. abstract function GetBird(); // 返回汽车实例
    32. }
    33. # 具体化 - 建造者 - 蓝色宝马
    34. class BlueCar extends CarBuilder{
    35. public function BuildHead(){$this->_car->_head = '蓝色';}
    36. public function BuildDoor(){$this->_car->_door = '蓝色';}
    37. public function BuildFoot(){$this->_car->_foot = '蓝色';}
    38. public function GetBird(){return $this->_car;}
    39. }
    40. # 具体化 - 建造者 - 红色宝马
    41. class RedCar extends CarBuilder{
    42. public function BuildHead(){$this->_car->_head = '红色';}
    43. public function BuildDoor(){$this->_car->_door = '红色';}
    44. public function BuildFoot(){$this->_car->_foot = '红色';}
    45. public function GetBird(){return $this->_car;}
    46. }
    47. /**
    48. * 实体 - 指挥者
    49. */
    50. class Director{
    51. # 执行改造
    52. public function Construct($_builder){
    53. $_builder->BuildHead();
    54. $_builder->BuildDoor();
    55. $_builder->BuildFoot();
    56. return $_builder->GetBird();
    57. }
    58. }
    59. # 测试
    60. $director = new Director();
    61. echo '蓝色宝马的车辆信息: <br/>';
    62. $blue_car = $director->Construct(new BlueCar());
    63. $blue_car->Show();
    64. echo '<br/>';
    65. echo '红色宝马的车辆信息: <br/>';
    66. $red_car = $director->Construct(new RedCar());
    67. $red_car->Show();

    浏览器输出

    1. 蓝色宝马的车辆信息:
    2. 车头的颜色:蓝色
    3. 车门的颜色:蓝色
    4. 车尾的颜色:蓝色
    5. 红色宝马的车辆信息:
    6. 车头的颜色:红色
    7. 车门的颜色:红色
    8. 车尾的颜色:红色

    建造者模式

    1. 1.产品角色,产品角色定义自身的组成属性
    2. 2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
    3. 3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义
    4. 4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品

    应用场景

    1. 建造者模式也称生成器模式,核心思想是将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。