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 相关文章推荐
windows下zendframework项目环境搭建(通过命令行配置)
Dec 06 PHP
php变量作用域的深入解析
Jun 03 PHP
PHP 函数call_user_func和call_user_func_array用法详解
Mar 02 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
Apr 18 PHP
ThinkPHP3.1新特性之动态设置自动完成和自动验证示例
Jun 19 PHP
PHP把JPEG图片转换成Progressive JPEG的方法
Jun 30 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
php通过rmdir删除目录的简单用法
Mar 18 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
php微信公众号开发之欢迎老朋友
Oct 20 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
地摊中国 - 珍藏老照片
2020/08/18 杂记
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
通过缓存数据库结果提高PHP性能的原理介绍
2012/09/05 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
详解JavaScript for循环中发送AJAX请求问题
2020/06/23 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
vue 组件使用中的一些细节点
2018/04/25 Javascript
Vue框架下引入ActiveX控件的问题解决
2019/03/25 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
2019/05/07 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
[01:05:40]VG vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python实现删除Android工程中的冗余字符串
2015/01/19 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
BP神经网络原理及Python实现代码
2018/12/18 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
一篇.NET面试题
2014/09/29 面试题
计算机通信工程专业毕业生推荐信
2013/12/24 职场文书
毕业生护理专业个人求职信范文
2014/01/04 职场文书
商场消防管理制度
2014/01/12 职场文书
校园演讲稿汇总
2014/05/21 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
交通安全主题班会
2015/08/12 职场文书
企业法人任命书
2015/09/21 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
PHP设计模式(观察者模式)
2021/07/07 PHP
Python中time与datetime模块使用方法详解
2022/03/31 Python