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 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
通过php快速统计某个数据库中每张表的数据量
Sep 04 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
PHP实现动态柱状图改进版
Mar 30 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
php实现的单一入口应用程序实例分析
Sep 23 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
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
php中常用编辑器推荐
2007/01/02 PHP
百度站点地图(百度sitemap)生成方法分享
2014/01/09 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
Zend Framework教程之Zend_Registry对象用法分析
2016/03/22 PHP
PHP 根据key 给二维数组分组
2016/12/09 PHP
jquery+json实现数据列表分页示例代码
2013/11/15 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
Javascript常用字符串判断函数代码分享
2014/12/08 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
如何用RxJS实现Redux Form
2018/12/29 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
python实现爬虫统计学校BBS男女比例(一)
2015/12/31 Python
Python解惑之整数比较详解
2017/04/24 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
Windows下Anaconda和PyCharm的安装与使用详解
2020/04/23 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
介绍一下SQL注入攻击的种类和防范手段
2012/02/18 面试题
大学四年规划书范文
2013/12/27 职场文书
三年级数学教学反思
2014/01/31 职场文书
教师中国梦演讲稿
2014/04/23 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
简易版租房协议书范本
2014/10/13 职场文书
教师个人年终总结
2015/02/11 职场文书
温馨祝福晨语:美丽的一天从我的问候开始
2019/11/28 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python