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程序中的常见漏洞进行攻击
Oct 09 PHP
php将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
PHP $_SERVER详解
Jan 16 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
PHP的一个基础知识 表单提交
Jul 04 PHP
php字符串函数学习之substr()
Mar 27 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
CentOS7编译安装php7.1的教程详解
Apr 18 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
《逃离塔科夫》——“萌新劝退,老手自嗨”的硬核FPS游戏
2020/04/03 其他游戏
聊天室php&amp;mysql(五)
2006/10/09 PHP
一个简洁的多级别论坛
2006/10/09 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
PHP 第一节 php简介
2012/04/28 PHP
PHP实现会员账号单唯一登录的方法分析
2019/03/07 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
google地图的路线实现代码
2009/08/20 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
微信小程序实现点击空白隐藏的方法示例
2019/08/13 Javascript
js 数组当前行添加数据方法详解
2020/07/28 Javascript
如何编写一个 Webpack Loader的实现
2020/10/18 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
解决python 输出是省略号的问题
2018/04/19 Python
Python使用tkinter库实现文本显示用户输入功能示例
2018/05/30 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
kali中python版本的切换方法
2019/07/11 Python
通信工程毕业生自荐信
2013/11/01 职场文书
时尚休闲吧创业计划书
2014/01/25 职场文书
投资合作协议书
2014/04/17 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
《暗黑破坏神2:重制版》本周进行第一轮A测 目前可官网进行申请报名
2021/04/07 其他游戏