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 相关文章推荐
php Http_Template_IT类库进行模板替换
Mar 19 PHP
php $_SERVER windows系统与linux系统下的区别说明
Feb 14 PHP
浅谈Eclipse PDT调试PHP程序
Jun 09 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
百度实时推送api接口应用示例
Oct 21 PHP
PHP版微信公众平台红包API
Apr 02 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
MAC下通过改apache配置文件切换php多版本的方法
Apr 26 PHP
ThinkPHP删除栏目(实现批量删除栏目)
Jun 21 PHP
WHOOPS PHP调试库的使用
Sep 29 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 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
深入了解php4(1)--回到未来
2006/10/09 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
PHP Class&amp;Object -- PHP 自排序二叉树的深入解析
2013/06/25 PHP
PHP在线调试执行的实现方法(附demo源码)
2016/04/28 PHP
PHP时间处理类操作示例
2018/09/05 PHP
ASP.NET jQuery 实例18 通过使用jQuery validation插件校验DropDownList
2012/02/03 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js中return false(阻止)的用法
2013/08/14 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
AngularJS基础知识笔记之过滤器
2015/05/10 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
微信小程序module.exports模块化操作实例浅析
2018/12/20 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
django 创建过滤器的实例详解
2017/08/14 Python
python实现浪漫的烟花秀
2019/01/30 Python
pandas通过字典生成dataframe的方法步骤
2019/07/23 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
彻底解决Python包下载慢问题
2020/11/15 Python
Mamas & Papas沙特阿拉伯:英国最受欢迎的婴儿品牌
2017/11/20 全球购物
心得体会开头
2014/01/01 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
预备党员转正材料
2014/12/19 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
盗窃罪辩护词范文
2015/05/21 职场文书
休学证明范本
2015/06/19 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Web前端:CSS最强总结 附详细代码
2021/03/31 HTML / CSS
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript