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 相关文章推荐
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
PHP IPV6正则表达式验证代码
Feb 16 PHP
php gzip压缩输出的实现方法
Apr 27 PHP
PHP处理Oracle的CLOB实例
Nov 03 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHP实现git部署的方法教程
Dec 19 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
Laravel 自动生成验证的实例讲解:login / logout
Oct 14 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 #PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
Mar 23 #PHP
PDO实现学生管理系统
Mar 21 #PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 #PHP
You might like
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
2011/11/10 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
2019/11/23 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
Javascript 日期对象Date扩展方法
2009/05/30 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
JS访问SWF的函数用法实例
2015/07/01 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
vuejs绑定class和style样式
2017/04/11 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
React事件处理的机制及原理
2018/12/03 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
简介JavaScript错误处理机制
2020/08/04 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
python发送邮件脚本
2018/05/22 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
Python脚本利用adb进行手机控制的方法
2019/07/08 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
Django admin组件的使用
2020/10/24 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
机电一体化专业求职信
2014/07/22 职场文书
入党积极分子对十八届四中全会期盼的思想汇报
2014/10/17 职场文书
大一新生军训新闻稿
2015/07/17 职场文书
小学数学教师研修感悟
2015/11/18 职场文书
用基于python的appium爬取b站直播消费记录
2021/04/17 Python
浅谈MySQL之select优化方案
2021/08/07 MySQL