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
PHP中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
php中大括号作用介绍
Mar 22 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
Sep 23 PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 PHP
关于Sphinx创建全文检索的索引介绍
Jun 25 PHP
php中使用array_filter()函数过滤空数组的实现代码
Aug 19 PHP
thinkPHP统计排行与分页显示功能示例
Dec 02 PHP
Yii2实现增删改查后留在当前页的方法详解
Jan 13 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
May 12 PHP
PHP+AJAX 投票器功能
Nov 11 PHP
PHP实现动态获取函数参数的方法示例
Apr 02 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
PHP基于imap获取邮件实例
2014/11/11 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
javascript Base类 包含基本的方法
2009/07/22 Javascript
jquery的ajax请求全面了解
2013/03/20 Javascript
Jquery 动态循环输出表格具体方法
2013/11/23 Javascript
JavaScript动态加载样式表的方法
2015/03/21 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
详解从Node.js的child_process模块来学习父子进程之间的通信
2017/03/27 Javascript
详解小程序中h5页面onShow实现及跨页面通信方案
2019/05/30 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
关于Python中异常(Exception)的汇总
2017/01/18 Python
python中类的属性和方法介绍
2018/11/27 Python
详解使用Python下载文件的几种方法
2019/10/13 Python
Python迭代器iterator生成器generator使用解析
2019/10/24 Python
python3常用的数据清洗方法(小结)
2019/10/31 Python
python创建学生管理系统
2019/11/22 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
2020/09/23 Python
pycharm Tab键设置成4个空格的操作
2021/02/26 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
经典团队口号大全
2014/06/21 职场文书
幼儿园端午节活动方案
2014/08/25 职场文书
慰问信模板
2015/02/14 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
工作汇报材料难写?方法都在这里了!
2019/07/01 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python