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 base64+gzinflate压缩编码和解码代码
Oct 03 PHP
PHP学习之整理字符串
Apr 17 PHP
PHP设计模式之装饰者模式
Feb 29 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
Symfony2创建页面实例详解
Mar 18 PHP
php实现微信扫码自动登陆与注册功能
Sep 22 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
php文件上传、下载和删除示例
Aug 28 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
Jun 16 PHP
php依赖注入知识点详解
Sep 23 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操作JSON格式数据的实现代码
2011/12/24 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
JavaScript基础知识之数据类型
2012/08/06 Javascript
深入分析JSONP跨域的原理
2014/12/10 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
jquery实现两个图片渐变切换效果的方法
2015/06/25 Javascript
JS实现左右拖动改变内容显示区域大小的方法
2015/10/13 Javascript
BootStrap Validator使用注意事项(必看篇)
2016/09/28 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
[14:57]DOTA2 HEROS教学视频教你分分钟做大人-幽鬼
2014/06/13 DOTA
用实例分析Python中method的参数传递过程
2015/04/02 Python
Python中使用不同编码读写txt文件详解
2015/05/28 Python
Django的分页器实例(paginator)
2017/12/01 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
单利模式及python实现方式详解
2018/03/20 Python
详解python中TCP协议中的粘包问题
2019/03/22 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
numpy 声明空数组详解
2019/12/05 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
波比布朗英国官网:Bobbi Brown英国
2017/11/13 全球购物
Converse匡威法国官网:美国著名帆布鞋品牌
2018/12/05 全球购物
Amcal中文官网:澳洲综合性连锁药房
2019/03/28 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
探矿工程师自荐信
2014/01/24 职场文书
2014年公司庆元旦活动方案
2014/03/05 职场文书
管理建议书范文
2014/05/13 职场文书
2014年预算员工作总结
2014/12/05 职场文书
防汛通知
2015/04/25 职场文书
导游词之平津战役纪念馆
2019/11/04 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis