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(2)
Oct 09 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
解析PHP中的unset究竟会不会释放内存
Jul 18 PHP
php curl基本操作详解
Jul 23 PHP
测试php连接mysql是否成功的代码分享
Jan 24 PHP
浅析PHP文件下载原理
Dec 25 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
PHP new static 和 new self详解
Feb 19 PHP
thinkPHP实现签到功能的方法
Mar 15 PHP
使用PHP反射机制来构造&quot;CREATE TABLE&quot;的sql语句
Mar 21 PHP
Laravel 5+ .env环境配置文件详解
Apr 06 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
You might like
PHP setTime 设置当前时间的代码
2012/08/27 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
jQuery技巧总结
2011/01/01 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
Node.js connect ECONNREFUSED错误解决办法
2016/09/15 Javascript
node.js基于mongodb的搜索分页示例
2017/01/22 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
用js将long型数据转换成date型或datetime型的实例
2017/07/03 Javascript
Vue.js进行查询操作的实例详解
2017/08/25 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
[29:23]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场1
2014/05/23 DOTA
使用Python脚本生成随机IP的简单方法
2015/07/30 Python
全面分析Python的优点和缺点
2018/02/07 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
详解numpy矩阵的创建与数据类型
2019/10/18 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python logging设置level失败的解决方法
2020/02/19 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
学生宿舍管理制度
2014/01/30 职场文书
校庆接待方案
2014/03/18 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
导游词之阆中古城
2019/12/23 职场文书
忆童年!用Python实现愤怒的小鸟游戏
2021/06/07 Python