php设计模式之建造器模式分析【星际争霸游戏案例】


Posted in PHP onJanuary 23, 2020

本文实例讲述了php设计模式之建造器模式。分享给大家供大家参考,具体如下:

星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队。
这存在一个问题,初始化画面的流程很乱。

待解决的问题:完成初始化画面的工作,同时尽量减少各种绘制细节的耦合。

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

建造器(Builder)模式示例:

<?php
  //规范制造各个零件的接口
  interface Builder
  {
    //制造地图零件
    public function buildMapPart();
    //制造建筑零件
    public function buildBuildingPart();
    //制造部队零件
    public function buildArmyPart();
    //组装零件
    public function getResult();
  }
  //实际建造器类,比如初始化某个任务关
  class ConcreteBuilder implements Builder
  {
    //制造地图零件
    public function buildMapPart()
    {
      //根据任务的设定画上地图
      echo "地图零件\n";
    }
    //制造建筑零件
    public function buildBuildingPart()
    {
      //根据任务的设定画上建筑,包括玩家的和敌人的
      echo "建筑零件\n";
    }
    //制造部队零件
    public function buildArmyPart()
    {
      //根据任务的设定画上部队,包括玩家的和敌人的
      echo "部队零件\n";
    }
    //组装零件
    public function getResult()
    {
      //将所有的东西叠加和处理,形成初始化画面
      echo "组装零件\n";
    }
  }
  //监督类,也就是控制绘制流程的类
  class Director
  {
    //私有属性,确定使用的建造器
    private $builder;
    //构造方法,参数为选定的建造器对象
    public function __construct($builder)
    {
      //确定使用的建造器
      $this->builder = $builder;
    }
    //负责建造流程的方法,调用建造器对象的方法,制造所有零件
    public function buildeAllPart()
    {
      //制造地图零件
      $this->builder->buildMapPart();
      //制造建筑零件
      $this->builder->buildBuildingPart();
      //制造部队零件
      $this->builder->buildArmyPart();
    }
  }
  //假设根据任务关,初始化我们需要的实际建造器对象
  $concreteBuilder = new ConcreteBuilder();
  //初始化一个监督对象
  $director = new Director($concreteBuilder);
  //制造所有零件
  $director->buildeAllPart();
  //最后让建造器组装零件,生成画面
  $concreteBuilder->getResult();
?>

运行结果:

地图零件
建筑零件
部队零件
组装零件

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

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个改进的UBB类
Oct 09 PHP
在PHP里得到前天和昨天的日期的代码
Aug 16 PHP
据说是雅虎的一份PHP面试题附答案
Jan 07 PHP
php中用socket模拟http中post或者get提交数据的示例代码
Aug 08 PHP
PHP使用GIFEncoder类处理gif图片实例
Jul 01 PHP
destoon实现底部添加你是第几位访问者的方法
Jul 15 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
Laravel实现autoload方法详解
May 07 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
PHP基于方差和标准差计算学生成绩的稳定性示例
Jul 04 PHP
PHP通过bypass disable functions执行系统命令的方法汇总
May 02 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 #PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 #PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 #PHP
PHP数据源架构模式之表入口模式实例分析
Jan 23 #PHP
TP3.2.3框架文件上传操作实例详解
Jan 23 #PHP
php的RSA加密解密算法原理与用法分析
Jan 23 #PHP
PHP检查文件是否存在,不存在自动创建及读取文件内容操作示例
Jan 23 #PHP
You might like
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
Wordpress 相册插件 NextGEN-Gallery 添加目录将中文转为拼音的解决办法
2010/12/29 PHP
基于php权限分配的实现代码
2013/04/28 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
windows 2008r2+php5.6.28环境搭建详细过程
2019/06/18 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
PHP实现倒计时功能
2020/11/16 PHP
javascript之函数直接量(function(){})()
2007/06/29 Javascript
js几个验证函数代码
2010/03/25 Javascript
JS定时器实例
2013/04/17 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
jQuery Mobile框架中的表单组件基础使用教程
2016/05/17 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
详解python单元测试框架unittest
2018/07/02 Python
利用nohup来开启python文件的方法
2019/01/14 Python
python实现AES加密和解密
2019/03/27 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
阿里云ECS服务器部署django的方法
2019/08/29 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
python正则表达式实例代码
2020/03/03 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
主管竞聘书范文
2014/03/31 职场文书
个人课题方案
2014/05/08 职场文书
空气环保标语
2014/06/12 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2015年物业管理工作总结
2015/04/23 职场文书
如何使用PyCharm及常用配置详解
2021/06/03 Python
Python中文纠错的简单实现
2021/07/07 Python
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android