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 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
Aug 07 PHP
php的一个简单加密解密代码
Jan 14 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP生成静态HTML文档实现代码
Jun 23 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
PHP 实现人民币小写转换成大写的方法及大小写转换函数
Nov 17 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
PHP封装的简单连接MongoDB类示例
Feb 13 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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缓存函数的使用说明
2013/05/10 PHP
TP - 比RBAC更好的权限认证方式(Auth类认证)
2021/03/09 PHP
javascript动态向网页中添加表格实现代码
2014/02/19 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
js+css实现导航效果实例
2015/02/10 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
修改js confirm alert 提示框文字的简单实例
2016/06/10 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
用 js 写一个 js 解释器过程详解
2019/08/02 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
JS如何调用WebAssembly编译出来的.wasm文件
2020/11/05 Javascript
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
python根据文件大小打log日志
2014/10/09 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
用Python绘制漫步图实例讲解
2020/02/26 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
Pycharm生成可执行文件.exe的实现方法
2020/06/02 Python
python调用win32接口进行截图的示例
2020/11/11 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
Otel.com:折扣酒店预订
2017/08/24 全球购物
毕业生就业自荐信
2013/12/04 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
婚礼司仪主持词
2014/03/14 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
高三英语复习计划
2015/01/19 职场文书
2015年教师学期工作总结
2015/04/30 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android
使用Python开发冰球小游戏
2022/04/30 Python