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中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
PHP同时连接多个mysql数据库示例代码
Mar 17 PHP
浅谈PDO的rowCount函数
Jun 18 PHP
在php中设置session用memcache来存储的方法总结
Jan 14 PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 PHP
php版微信发红包接口用法示例
Sep 23 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
Oct 12 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 PHP
PHP执行普通shell命令流程解析
Aug 24 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
Zerg剧情介绍
2020/03/14 星际争霸
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
php语言的7种基本的排序方法
2020/12/28 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
php操作access数据库的方法详解
2017/02/22 PHP
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
jQuery获取样式中颜色值的方法
2015/01/29 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
javascript数组遍历的方法实例分析
2016/09/13 Javascript
基于jstree使用AJAX请求获取数据形成树
2017/08/29 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
[00:15]天涯墨客终极技能展示
2018/08/25 DOTA
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
2017/07/06 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python基于回溯法解决01背包问题实例
2017/12/06 Python
基于python requests库中的代理实例讲解
2018/05/07 Python
Django 缓存配置Redis使用详解
2019/07/23 Python
Python利用PyExecJS库执行JS函数的案例分析
2019/12/18 Python
临床医学专业学生的自我评价分享
2013/11/21 职场文书
国际商务系学生个人的自我评价
2013/11/26 职场文书
创业计划书的主要内容有哪些
2014/01/29 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
民主评议党员个人总结
2015/02/13 职场文书
通知书大全
2015/04/27 职场文书
民事起诉书范本
2015/05/19 职场文书
期中考试后的感想
2015/08/07 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
在SQL Server中使用 Try Catch 处理异常的示例详解
2022/07/15 SQL Server