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.MVC的模板标签系统(五)
Sep 05 PHP
详解php的魔术方法__get()和__set()使用介绍
Sep 19 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
php生成固定长度纯数字编码的方法
Jul 09 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
Oct 13 PHP
PHP打印输出函数汇总
Aug 28 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
postman的安装与使用方法(模拟Get和Post请求)
Aug 06 PHP
在laravel中使用with实现动态添加where条件
Oct 10 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
JavaScript创建命名空间(namespace)的最简实现
2007/12/11 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
jQuery实现的图文高亮滚动切换特效实例
2015/08/10 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
layer页面跳转,获取html子节点元素的值方法
2019/09/27 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
vue实现的多页面项目如何优化打包的步骤详解
2020/07/19 Javascript
R语言 vs Python对比:数据分析哪家强?
2017/11/17 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
对Python协程之异步同步的区别详解
2019/02/19 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
如何提高python 中for循环的效率
2020/04/15 Python
Django 解决由save方法引发的错误
2020/05/21 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
RetroStage德国:复古服装
2019/02/03 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
《她是我的朋友》教学反思
2014/04/26 职场文书
企业法人代表任命书
2014/06/06 职场文书
法英专业大学生职业生涯规划范文:衡外情,量己力!
2014/09/23 职场文书
工作态度不端正检讨书
2014/10/04 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
2014年保育员个人工作总结
2014/12/02 职场文书
保外就医申请书范文
2015/08/06 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
Log4j.properties配置及其使用
2021/08/02 Java/Android