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 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
PHP explode()函数用法、切分字符串
Oct 03 PHP
用php实现选择排序的解决方法
May 04 PHP
PHP中批量生成静态html(命令行下运行PHP)
Apr 19 PHP
PHP函数addslashes和mysql_real_escape_string的区别
Apr 22 PHP
PHP文件上传操作实例详解
Sep 27 PHP
实现PHP搜索加分页
Oct 12 PHP
php出租房数据管理及搜索页面
May 23 PHP
PHP中PDO事务处理操作示例
May 02 PHP
PHP 二维array转换json的实例讲解
Aug 21 PHP
PHP中检查isset()和!empty()函数的必要性
Feb 13 PHP
详解PHP PDO简单教程
May 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
jQuery 1.0.2
2006/10/11 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
浅谈Javascript 数组与字典
2015/01/29 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
jQuery中extend函数详解
2015/07/13 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
原生js制作日历控件实例分享
2016/04/06 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
jQuery插件echarts实现的多折线图效果示例【附demo源码下载】
2017/03/04 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
layui 优化button按钮和弹出框的方法
2018/08/15 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
laypage+SpringMVC实现后端分页
2019/07/27 Javascript
JS多个表单数据提交下的serialize()应用实例分析
2019/08/27 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
Python去掉字符串中空格的方法
2014/03/11 Python
Python实现发送email的几种常用方法
2014/08/18 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
适合Python初学者的一些编程技巧
2020/02/12 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
药剂专业自荐书
2014/06/20 职场文书
社会工作专业求职信
2014/07/15 职场文书
乡镇平安建设汇报材料
2014/08/25 职场文书
营销学习心得体会
2014/09/12 职场文书
出生医学证明书
2014/09/15 职场文书
整改落实自查报告
2014/11/05 职场文书
优秀班主任材料
2014/12/16 职场文书
实习班主任自我评价
2015/03/11 职场文书
2016继续教育研修日志
2015/11/13 职场文书
新学期开学寄语2016
2015/12/04 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers
matplotlib之pyplot模块实现添加子图subplot的使用
2021/04/25 Python
Golang 空map和未初始化map的注意事项说明
2021/04/29 Golang