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 28 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
php使用Jpgraph绘制3D饼状图的方法
Jun 10 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
Jun 05 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
PHP版单点登陆实现方案的实例
Nov 17 PHP
php中引用&amp;的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 PHP
php实现登录页面的简单实例
Sep 29 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
php中get_object_vars()在数组的实例用法
Feb 22 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的远程图片抓取函数分享
2013/09/25 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
Javascript中正则表达式的全局匹配模式分析
2011/04/26 Javascript
简略说明Javascript中的= =(等于)与= = =(全等于)区别
2013/04/16 Javascript
JS和Jquery获取和修改label的值的示例代码
2014/01/15 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
AngularJS语法详解(续)
2015/01/23 Javascript
JavaScript之Object类型介绍
2015/04/01 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
JavaScript面试开发常用的知识点总结
2016/08/08 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
2016/11/28 Javascript
微信小程序实现点击按钮修改文字大小功能【附demo源码下载】
2017/12/06 Javascript
打通前后端构建一个Vue+Express的开发环境
2018/07/17 Javascript
Vue.js 事件修饰符的使用教程
2018/11/01 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
vue进入页面时滚动条始终在底部代码实例
2019/03/26 Javascript
你准备好迎接vue3.0了吗
2020/04/28 Javascript
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
在keras里面实现计算f1-score的代码
2020/06/15 Python
python实现邮件循环自动发件功能
2020/09/11 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
商场端午节活动方案
2014/01/29 职场文书
2014年迎新年活动方案
2014/02/19 职场文书
护理专业自荐书
2014/06/04 职场文书
高考标语大全
2014/06/05 职场文书
文明好少年事迹材料
2014/08/19 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
2014年人事行政工作总结
2014/12/03 职场文书
婚前保证书范文
2015/02/28 职场文书
MySQL实例精讲单行函数以及字符数学日期流程控制
2021/10/15 MySQL