php设计模式学习系列(六)--建造者模式

声明:本系列博客参考资料《大话设计模式》,作者程杰。


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


            例如:汽车,他的发动机引擎有好多品牌,轮胎也有各种材质,内饰更是千奇百怪;鸟,他的头、翅膀以及脚有各种颜色和形状,在创建这种复杂对象的时候,我们建议使用建造者模式。


       类图:

      


         建造者模式一般认为有四个角色:

     1.产品角色,产品角色定义自身的组成属性

     2.抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品

     3.具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义

     4.指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品

建造者模式通常包括下面几个角色:

1. builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

2. ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

3. Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

4. Product:要创建的复杂对象。


 

     代码:

      

[php]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. <?php  
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: Jiang 
  5.  * Date: 2015/4/25 
  6.  * Time: 9:31 
  7.  */  
  8.   
  9. /**具体产品角色  鸟类 
  10.  * Class Bird 
  11.  */  
  12. class Bird  
  13. {  
  14.     public $_head;  
  15.     public $_wing;  
  16.     public $_foot;  
  17.   
  18.     function show()  
  19.     {  
  20.         echo "头的颜色:{$this->_head}<br/>";  
  21.         echo "翅膀的颜色:{$this->_wing}<br/>";  
  22.         echo "脚的颜色:{$this->_foot}<br/>";  
  23.     }  
  24. }  
  25.   
  26. /**抽象鸟的建造者(生成器) 
  27.  * Class BirdBuilder 
  28.  */  
  29. abstract class BirdBuilder  
  30. {  
  31.     protected $_bird;  
  32.   
  33.     function __construct()  
  34.     {  
  35.         $this->_bird=new Bird();  
  36.     }  
  37.   
  38.     abstract function BuildHead();  
  39.     abstract function BuildWing();  
  40.     abstract function BuildFoot();  
  41.     abstract function GetBird();  
  42. }  
  43.   
  44. /**具体鸟的建造者(生成器)   蓝鸟 
  45.  * Class BlueBird 
  46.  */  
  47. class BlueBird extends BirdBuilder  
  48. {  
  49.   
  50.     function BuildHead()  
  51.     {  
  52.         // TODO: Implement BuilderHead() method.  
  53.         $this->_bird->_head="Blue";  
  54.     }  
  55.   
  56.     function BuildWing()  
  57.     {  
  58.         // TODO: Implement BuilderWing() method.  
  59.         $this->_bird->_wing="Blue";  
  60.     }  
  61.   
  62.     function BuildFoot()  
  63.     {  
  64.         // TODO: Implement BuilderFoot() method.  
  65.         $this->_bird->_foot="Blue";  
  66.     }  
  67.   
  68.     function GetBird()  
  69.     {  
  70.         // TODO: Implement GetBird() method.  
  71.         return $this->_bird;  
  72.     }  
  73. }  
  74.   
  75. /**玫瑰鸟 
  76.  * Class RoseBird 
  77.  */  
  78. class RoseBird extends BirdBuilder  
  79. {  
  80.   
  81.     function BuildHead()  
  82.     {  
  83.         // TODO: Implement BuildHead() method.  
  84.         $this->_bird->_head="Red";  
  85.     }  
  86.   
  87.     function BuildWing()  
  88.     {  
  89.         // TODO: Implement BuildWing() method.  
  90.         $this->_bird->_wing="Black";  
  91.     }  
  92.   
  93.     function BuildFoot()  
  94.     {  
  95.         // TODO: Implement BuildFoot() method.  
  96.         $this->_bird->_foot="Green";  
  97.     }  
  98.   
  99.     function GetBird()  
  100.     {  
  101.         // TODO: Implement GetBird() method.  
  102.         return $this->_bird;  
  103.     }  
  104. }  
  105.   
  106. /**指挥者 
  107.  * Class Director 
  108.  */  
  109. class Director  
  110. {  
  111.     /** 
  112.      * @param $_builder      建造者 
  113.      * @return mixed         产品类:鸟 
  114.      */  
  115.     function Construct($_builder)  
  116.     {  
  117.         $_builder->BuildHead();  
  118.         $_builder->BuildWing();  
  119.         $_builder->BuildFoot();  
  120.         return $_builder->GetBird();  
  121.     }  
  122. }  

       调用客户端测试代码:

     

[php]  view plain  copy
 print ? 在CODE上查看代码片 派生到我的代码片
  1. header("Content-Type:text/html;charset=utf-8");  
  2. //------------------------生成器模式测试代码------------------  
  3. require_once "./Builder/Builder.php";  
  4.   
  5. $director=new Director();  
  6.   
  7. echo "蓝鸟的组成:<hr/>";  
  8.   
  9. $blue_bird=$director->Construct(new BlueBird());  
  10. $blue_bird->Show();  
  11.   
  12. echo "<br/>Rose鸟的组成:<hr/>";  
  13.   
  14. $rose_bird=$director->Construct(new RoseBird());  
  15. $rose_bird->Show();  
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值