首页 > 语言 > PHP > 正文

php Builder建造器模式学习笔记

2024-09-04 11:43:40
字体:大 中 小
来源:转载
供稿:网友

星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队,存在一个问题,初始化画面的流程很乱,待解决的问题:完成初始化画面的工作,同时尽量减少各种绘制细节的耦合.

思路:既然星际的画面由几个部分组成,地图(就是地形和矿产),建筑,部队,那么我们把他们看成是零件,组装起来就是最后的产品(整个画面).

建造器(Builder)模式示例:

  1. <?php 
  2.  
  3. //规范制造各个零件的接口 
  4.  
  5. interface Builder 
  6.  
  7. { 
  8.  
  9.   //制造地图零件 
  10.  
  11.   public function buildMapPart(); 
  12.  
  13.   //制造建筑零件 
  14.  
  15.   public function buildBuildingPart(); 
  16.  
  17.   //制造部队零件 
  18.  
  19.   public function buildArmyPart(); 
  20.  
  21.   //组装零件 
  22.  
  23.   public function getResult(); 
  24.  
  25. } 
  26.  
  27. //实际建造器类,比如初始化某个任务关 
  28.  
  29. class ConcreteBuilder implements Builder 
  30.  
  31. { 
  32.  
  33.   //制造地图零件 
  34.  
  35.   public function buildMapPart() 
  36.  
  37.   { 
  38.  
  39.   //根据任务的设定画上地图 
  40.  
  41.   echo '地图零件n'; 
  42.  
  43.   } 
  44.  
  45.   //制造建筑零件 
  46.  
  47.   public function buildBuildingPart() 
  48.  
  49.   { 
  50.  
  51.   //根据任务的设定画上建筑,包括玩家的和敌人的 
  52.  
  53.   echo '建筑零件n'; 
  54.  
  55.   } 
  56.  
  57.   //制造部队零件 
  58.  
  59.   public function buildArmyPart() 
  60.  
  61.   { 
  62.  
  63.   //根据任务的设定画上部队,包括玩家的和敌人的 
  64.  
  65.   echo '部队零件n'; 
  66.  
  67.   } 
  68.  
  69.   //组装零件 
  70.  
  71.   public function getResult() 
  72.  
  73.   { 
  74.  
  75.   //将所有的东西叠加和处理,形成初始化画面 
  76.  
  77.   echo '组装零件n'; 
  78.  
  79.   } 
  80.  
  81. } 
  82.  
  83. //监督类,也就是控制绘制流程的类 
  84.  
  85. class Director 
  86.  
  87. { 
  88.  
  89.   //私有属性,确定使用的建造器 
  90.  
  91.   private $builder; 
  92.  
  93.   //构造方法,参数为选定的建造器对象 
  94.  
  95.   public function __construct($builder) 
  96.  
  97.   { 
  98.  
  99.     //确定使用的建造器 
  100.  
  101.     $this->builder = $builder; 
  102.  
  103.   } 
  104.  
  105.   //负责建造流程的方法,调用建造器对象的方法,制造所有零件 
  106.  
  107.   public function buildeAllPart() 
  108.  
  109.   { 
  110.  
  111.     //制造地图零件 
  112.  
  113.     $this->builder->buildMapPart(); 
  114.  
  115.     //制造建筑零件 
  116.  
  117.     $this->builder->buildBuildingPart(); 
  118.  
  119.     //制造部队零件 
  120.  
  121.     $this->builder->buildArmyPart(); 
  122.  
  123.   } 
  124.  
  125. } 
  126.  
  127. //假设根据任务关,初始化我们需要的实际建造器对象 
  128.  
  129. $concreteBuilder = new ConcreteBuilder(); 
  130.  
  131. //初始化一个监督对象 
  132.  
  133. $director = new Director($concreteBuilder); 
  134.  
  135. //制造所有零件 
  136.  
  137. $director->buildeAllPart(); 
  138.  
  139. //最后让建造器组装零件,生成画面 
  140.  
  141. $concreteBuilder->getResult(); 
  142.  
  143. ?> 

用途总结:建造器模式可以将流程和细节分离,各司其职.

实现总结:需要一个建造器接口或者抽象类,负责规范各个方法,比如上面的Builder,然后让实际的建造器类去实现所有的方法,比如上面的ConcreteBuilder,同时需要负责流程管理的监督类,比如上面的Director,负责调用建造器的各个零件制造方法,最后让建造器去组装所有的零件.

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表