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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
Drupal7中常用的数据库操作实例
Mar 02 PHP
PHP清除数组中所有字符串两端空格的方法
Oct 20 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
PHP的Laravel框架中使用消息队列queue及异步队列的方法
Mar 21 PHP
关于php中一些字符串总结
May 05 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP实现的简单排列组合算法应用示例
Jun 20 PHP
php精度计算的问题解析
Jun 21 PHP
PHP策略模式写法
Apr 01 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
我的论坛源代码(三)
2006/10/09 PHP
php define的第二个参数使用方法
2013/11/04 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
用js判断用户浏览器是否是XP SP2的IE6
2007/03/08 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
Angularjs 动态添加指令并绑定事件的方法
2017/04/13 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
Python2.x中文乱码问题解决方法
2015/06/02 Python
使用Python通过win32 COM打开Excel并添加Sheet的方法
2018/05/02 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
Python 判断奇数偶数的方法
2018/12/20 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
Python 寻找局部最高点的实现
2019/12/05 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
tensorflow保持每次训练结果一致的简单实现
2020/02/17 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
一文详述 Python 中的 property 语法
2020/09/01 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
澳大利亚首屈一指的鞋类品牌:Tony Bianco
2018/03/13 全球购物
工程承包协议书
2014/04/22 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
小学综合实践活动总结
2014/07/07 职场文书
同学会邀请函模板
2015/01/30 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
postgresql之greenplum字符串去重拼接方式
2023/05/08 PostgreSQL