php设计模式之模板模式实例分析【星际争霸游戏案例】


Posted in PHP onMarch 24, 2020

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

星际中的虫族部队有个特别的进化兵种,就是飞龙,飞龙可以变成空中卫士(天蟹)或者吞噬者(对空的)。另外还有口水兵可以进化变成地刺。

这三个变化过程都是类似的:变化的原部队消失,产生一个蛋或茧,孵化一会儿,蛋消失,新的部队产生。

如果我们把这三个进化独立开,就会产生重复的代码,冗余度增大了,所以我们要设法减少多余的代码。

待解决的问题:要经历同样的几个步骤,只是每个步骤的细节会有不同。

思路:做一个进化工程的框架,我们只要控制细节就可以了。

模板模式模式示例:

<?php
  //进化的框架类,它是个抽象类
  abstract class evolution 
  {
    //框架方法,由它来实施各个步骤,用final禁止子类覆盖
    final public function process($troop)
    {
      //生成一个蛋,参数为进化的部队
      $egg = $this->becomeEgg($troop);

      //等待蛋孵化,参数为蛋
      $this->waitEgg($egg);

      //孵化后产生新部队
      return $this->becomeNew($egg);
    }

    //下面三个抽象方法,由具体子类来实现
    abstract public function becomeEgg($troop);

    abstract public function waitEgg($egg);

    abstract public function becomeNew($egg);
  }

  //为了简单说明,这里用空中卫士(天蟹)的进化类来演示,地刺等的处理方法类似

  //天蟹的进化类继承抽象进化类
  class GuardianEvolution extends evolution 
  {
    //实现生成一个蛋
    public function becomeEgg($troop)
    {
      //销毁飞龙,返回一个蛋的对象的代码
    }

    //等待蛋孵化
    public function waitEgg($troop)
    {
      //等待几十秒钟的代码
    }

    //孵化后产生新部队
    public function becomeNew(($troop)
    {
      //销毁蛋,返回一个天蟹
    }
  }

  //新建一个天蟹进化的对象
  $e1 = new GuardianEvolution();

  //让它调用父类的进化框架函数,自动完成三个步骤
  $e1->process($sds);

?>

用途总结:模板模式可以将一系列的步骤自动化,同时又可以满足不同的细节变化。

实现总结:需要一个抽象类来包含框架函数,让具体的子类继承它,并实现所有的步骤。使用的时候只要调用框架函数就自动完成了。

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

PHP 相关文章推荐
聊天室php&amp;mysql(六)
Oct 09 PHP
浅析PHP水印技术
Feb 14 PHP
php中判断一个字符串包含另一个字符串的方法
Mar 19 PHP
基于php设计模式中工厂模式详细介绍
May 15 PHP
ThinkPHP实现批量删除数据的代码实例
Jul 02 PHP
php数组索引的Key加引号和不加引号的区别
Aug 19 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
php生成高清缩略图实例详解
Dec 07 PHP
WordPress中用于检索模版的相关PHP函数使用解析
Dec 15 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
PHP封装的分页类与简单用法示例
Feb 25 PHP
Laravel框架源码解析之反射的使用详解
May 14 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 #PHP
php 的多进程操作实践案例分析
Feb 28 #PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 #PHP
You might like
用PHP获取Google AJAX Search API 数据的代码
2010/03/12 PHP
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
php密码生成类实例
2014/09/24 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
javascript一点特殊用法
2008/05/28 Javascript
js程序中美元符号$是什么
2008/06/05 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
WebApi+Bootstrap+KnockoutJs打造单页面程序
2016/05/16 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
利用Vue.js框架实现火车票查询系统(附源码)
2017/02/27 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
Python统计列表中的重复项出现的次数的方法
2014/08/18 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
keras.layer.input()用法说明
2020/06/16 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
军训自我鉴定200字
2014/02/13 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
五好关工委申报材料
2014/05/31 职场文书
关于运动会的广播稿
2014/09/22 职场文书