zoukankan      html  css  js  c++  java
  • 建造者模式

    建造模式是对象的创建模式,建造模式可以将一个产品的内部表象和产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。Mailer()类使用的就是建造模式。设计到Builer以及Director,Product等。

    下面以一个案例说明:(以下案例是针对两个不同的建造者-)

      1 /**
      2  * 
      3  * 建造者模式 ...
      4  * @author Lujianchao
      5  *
      6  */
      7 
      8 /**
      9  * 
     10  * Director
     11  * @author Lujianchao
     12  *
     13  */
     14 
     15 class Director{
     16     
     17     protected $builer;
     18     protected $configs;
     19 /**
     20  * 
     21  * 初始化导演类
     22  * @param $builer
     23 
     24  */
     25     
     26     public function __construct(Builer $builder){
     27         $this->builer=$builder;
     28     }
     29 
     30     /**
     31      * 这里用来指导建造工序
     32  * @param $configs
     33      */
     34     public function build($configs){
     35         
     36         $this->builer->setBody($configs['body']);
     37         $this->builer->setFooter($configs['footer']);
     38         $this->builer->setHeader($configs['header']);
     39         /**
     40          * 返回
     41          */
     42 
     43     }
     44     
     45     public function getProduct(){
     46     
     47         echo $this->builer->getRobot();
     48     
     49         
     50     }
     51     
     52 
     53 }
     54 /**
     55  * 
     56  * 抽象类Buider
     57  * @author Lujianchao
     58  *
     59  */
     60 abstract class Builer{
     61 
     62     protected $header;
     63     protected $footer;
     64     protected $body;
     65     
     66     public function setHeader($header){}
     67     public function setBody($body){}
     68     public function setFooter($footer){}
     69     
     70     public function getRobot(){    }
     71 }
     72 
     73 
     74 /**
     75  * cleanRobotBuilder
     76  */
     77 
     78 class CleanRobotBuiler extends Builer{
     79 
     80     public function setHeader($header){
     81     
     82         $this->header=$header;
     83         
     84         }
     85     public function setBody($body){
     86     
     87         $this->body=$body;
     88     }
     89     public function setFooter($footer){
     90     
     91         $this->footer=$footer;
     92     }
     93     
     94     public function getRobot(){
     95     
     96         return  "I am a cleanRobot ! body:{$this->body},footer:{$this->footer},header:{$this->header}";
     97     
     98     }
     99 
    100 }
    101 
    102 
    103 /**
    104  * mealRobotBuilder
    105  */
    106 
    107 class MealRobotBuiler extends Builer{
    108 
    109     public function setHeader($header){
    110     
    111         $this->header=$header;
    112         
    113         }
    114     public function setBody($body){
    115     
    116         $this->body=$body;
    117     }
    118     public function setFooter($footer){
    119     
    120         $this->footer=$footer;
    121     }
    122     
    123     public function getRobot(){
    124     
    125         return "I am a mealRobot ! body:{$this->body},footer:{$this->footer},header:{$this->header}";
    126     
    127     }
    128 
    129 }
    130 
    131 
    132 class Client{
    133 
    134     /**
    135      * 
    136      * 客户端 ...
    137      */
    138 
    139     public static function  main(){
    140     
    141         $builder=new CleanRobotBuiler();
    142         
    143         $configs=array('footer'=>'circle','body'=>'machinekey','header'=>'tianxian');
    144         
    145         $direct=new Director($builder);
    146         
    147         $direct->build($configs);
    148         
    149         $direct->getProduct();
    150         
    151         
    152     
    153     }
    154 
    155 }
    156 
    157 Client::main();
    View Code

    建造模式与抽象工厂模式的比较

    两者都是用来创建同事属于几个产品族的对象的模式。

    在抽象工厂模式中,每一次工厂对象被调用时都会返回一个完整的产品对象,而客户端有可能会决定把这些产品组装成一个更大更复杂的产品,也有可能不会。建造类则不同,它一点一点地建造出一个复杂的产品,而这个产品的组装过程就发送在建造者角色内部。建造者模式的客户端拿到的是一个完整的最后产品。虽说两者都是设计模式,但是抽象工厂模式处在更加具体的尺度上,而建造者模式则处于更加宏观的尺度上。

    比如众神造人:女娲利用建造模式负责把灵魂、耳目、手臂等组合成一个完整的人,而黄帝、上骈、桑林各自利用工厂模式创造出灵魂耳目手臂等。女娲不必考虑灵魂耳目手臂是什么样子,怎么创造出来的。

    建造模式与策略模式:建造模式是策略模式的一种特殊情况。这两种模式的不同在于他们的用意不同。建造模式适用于为客户端一点一点地建造出新的对象,而不同类型的具体建造者角色虽然拥有相同的接口,但是它们所创造的出来的对象可能完全不同。

    策略模式的目的是为了算法提供抽象的接口,换言之。一个具体策略类把一个算法包装到一个对象里面,而不同的具体策略对象为一种一般性的服务提供不同的实现。

    在以下情况下应当使用建造模式:

    1、需要生成的产品对象有复杂的的内部结构,每个内部成分本身可能是对象,也可以是一个对象的组成部分。

    2.需要生产的产品对象的属性相互依赖,建造模式可以强制实行一种分步骤进行的建造过程,因此如果产品对象的一个属性必须在另一个属性被赋值之后才可以被赋值使用建造者模式是一个很好的设计思想。

  • 相关阅读:
    手机发送验证码—.net代码
    AJAX之XMLHttpRequest
    JQuery总结+实例
    ASP.NET总结——更改后
    css总结——position
    JavaScript的程序构成
    初识javascript
    asp总结
    北大青鸟代码---asp.net初学者宝典
    iOS常用技术-Label自适应
  • 原文地址:https://www.cnblogs.com/phplover/p/3087470.html
Copyright © 2011-2022 走看看