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
PHP5新特性: 更加面向对象化的PHP
Nov 18 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
Jul 05 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
使用PHPCMS搭建wap手机网站
Sep 20 PHP
php猜单词游戏
Sep 29 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
Oct 19 PHP
PHP读取文件的常见几种方法
Nov 03 PHP
一个实用的php验证码类
Jul 06 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
PHP超全局变量实现原理及代码解析
Sep 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
ajax实现无刷新分页(php)
2010/07/18 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
ES6入门教程之let和const命令详解
2017/05/17 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
利用python求相邻数的方法示例
2017/08/18 Python
Python2随机数列生成器简单实例
2017/09/04 Python
TensorFlow实现非线性支持向量机的实现方法
2018/04/28 Python
Windows下安装Scrapy
2018/10/17 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
python实现QQ邮箱/163邮箱的邮件发送
2019/01/22 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
关于tf.TFRecordReader()函数的用法解析
2020/02/17 Python
执行Python程序时模块报错问题
2020/03/26 Python
印尼穆斯林时尚购物网站:Hijabenka
2016/12/10 全球购物
香港艺人陈冠希创办的潮流品牌:JUICESTORE
2021/03/04 全球购物
股份转让协议书
2014/04/12 职场文书
合作经营协议书
2014/04/17 职场文书
学雷锋倡议书
2015/01/19 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
Python常遇到的错误和异常
2021/11/02 Python
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏