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 相关文章推荐
附件名前加网站名
Mar 23 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
Oct 21 PHP
php+mysqli使用面向对象方式更新数据库实例
Jan 29 PHP
PHP-FPM之Chroot执行环境详解
Aug 03 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
CakePHP框架Session设置方法分析
Feb 23 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
PHP日期和时间函数的使用示例详解
Aug 06 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP仿博客园 个人博客(1) 数据库与界面设计
2013/07/05 PHP
CI框架中zip类应用示例
2014/06/17 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php微信开发接入
2016/08/27 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
JS的千分位算法实现思路
2013/07/31 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
javascript中获取元素标签中间的内容的实现方法
2016/10/08 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
Vue的生命周期操作示例
2019/09/17 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
[01:02]2014 DOTA2国际邀请赛中国区预选赛 现场抢先看
2014/05/22 DOTA
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
Python3 socket同步通信简单示例
2017/06/07 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
python批量创建指定名称的文件夹
2019/03/21 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
浅谈Python3中strip()、lstrip()、rstrip()用法详解
2019/04/29 Python
Python如何访问字符串中的值
2020/02/09 Python
在 Pycharm 安装使用black的方法详解
2020/04/02 Python
英国排名第一的LED灯泡网站:LED Bulbs
2019/09/03 全球购物
农村婚礼证婚词
2014/01/10 职场文书
模具数控专业自荐信
2014/01/27 职场文书
小学美术教学反思
2014/02/01 职场文书
毕业生自荐书
2014/02/03 职场文书
记账会计岗位职责
2014/06/16 职场文书
五年级数学教学反思
2016/02/16 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书