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 Smarty date_format [格式化时间日期]
Mar 15 PHP
php设计模式 Mediator (中介者模式)
Jun 26 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
PHP中feof()函数实例测试
Aug 23 PHP
php使用socket post数据到其它web服务器的方法
Jun 02 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
php cookie 详解使用实例
Nov 03 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
php实现的三个常用加密解密功能函数示例
Nov 06 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
Mar 12 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和ACCESS写聊天室(八)
2006/10/09 PHP
php实现简单的上传进度条
2015/11/17 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
jQuery 一个图片切换的插件
2011/10/09 Javascript
jquery入门—数据删除与隔行变色以及图片预览
2013/01/07 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
实例详解带参数的 npm script
2019/05/28 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
python自动化测试实例解析
2014/09/28 Python
进一步探究Python中的正则表达式
2015/04/28 Python
python实现RSA加密(解密)算法
2016/02/17 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
python matlibplot绘制3D图形
2018/07/02 Python
在Pycharm terminal中字体大小设置的方法
2019/01/16 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
python使用requests.session模拟登录
2019/08/09 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
python上selenium的弹框操作实现
2020/07/13 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
南威尔士家居商店:Leekes
2016/10/25 全球购物
澳大利亚在线性感内衣商店:Fantasy Lingerie
2021/02/07 全球购物
C/C++程序员常见面试题一
2012/12/08 面试题
投资意向书
2014/07/30 职场文书
庐山导游词
2015/02/03 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
困难补助申请报告
2015/05/19 职场文书
运动会3000米加油稿
2015/07/21 职场文书