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 相关文章推荐
DOMXML函数笔记
Oct 09 PHP
php获取网页内容方法总结
Dec 04 PHP
php 图片上添加透明度渐变的效果
Jun 29 PHP
奇怪的PHP引用效率问题分析
Mar 23 PHP
PHP解决URL中文GBK乱码问题的两种方法
Jun 03 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
php简单获取目录列表的方法
Mar 24 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
PHP安全下载文件的方法
Apr 07 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 PHP
PHP合并两个或多个数组的方法
Jan 20 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 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
php 截取字符串并以零补齐str_pad() 函数
2011/05/07 PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
2014/01/14 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
用原生JavaScript实现jQuery的$.getJSON的解决方法
2013/05/03 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
jquery设置按钮停顿3秒不可用
2014/03/07 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
微信小程序 前端源码逻辑和工作流详解
2016/10/08 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
Vue实现数据表格合并列rowspan效果
2020/11/30 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
javascript实现随机抽奖功能
2020/12/30 Javascript
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
浅谈keras保存模型中的save()和save_weights()区别
2020/05/21 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
CSS3贝塞尔曲线示例:创建链接悬停动画效果
2020/11/19 HTML / CSS
H5 canvas实现贪吃蛇小游戏
2017/07/28 HTML / CSS
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
什么是.net的Remoting技术
2016/07/08 面试题
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
计算机软件个人的自荐信范文
2013/12/01 职场文书
分家协议书
2014/04/21 职场文书
市场拓展计划书
2014/05/03 职场文书
失职检讨书大全
2015/01/26 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android