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脚本数据库功能详解(下)
Oct 09 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
PHP编程风格规范分享
Jan 15 PHP
C# WinForm中实现快捷键自定义设置实例
Jan 23 PHP
PHP获得数组交集与差集的方法
Jun 10 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
Sep 29 PHP
Json_encode防止汉字转义成unicode的方法
Feb 25 PHP
浅析Yii2 GridView 日期格式化并实现日期可搜索教程
Apr 22 PHP
CodeIgniter生成静态页的方法
May 17 PHP
php接口技术实例详解
Dec 07 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 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 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
2010/04/28 PHP
PHP 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
JS date对象的减法处理实现代码
2010/12/28 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
jQuery实现查找链接文字替换属性的方法
2016/06/27 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
node.js基础知识汇总
2020/08/25 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
[01:02:25]2014 DOTA2华西杯精英邀请赛 5 24 iG VS DK
2014/05/26 DOTA
Python中标准模块importlib详解
2017/04/16 Python
Python实现1-9数组形成的结果为100的所有运算式的示例
2017/11/03 Python
python如何定义带参数的装饰器
2018/03/20 Python
python 3.6.5 安装配置方法图文教程
2018/09/18 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
深入浅析css3 border-image边框图像详解
2015/11/24 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
Stefania Mode英国:奢华设计师和时尚服装
2017/10/23 全球购物
制定岗位职责的原则
2013/11/08 职场文书
大型车展策划方案
2014/02/01 职场文书
任命书怎么写
2014/06/04 职场文书
我们的节日国庆活动方案
2014/08/19 职场文书
学生吸烟检讨书
2014/09/14 职场文书
2015新年寄语(一句话)
2014/12/08 职场文书
募捐感谢信
2015/01/22 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
预备党员入党思想汇报(范文)
2019/08/14 职场文书