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 cache类代码(php数据缓存类)
Apr 15 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
php通过记录IP来防止表单重复提交方法分析
Dec 16 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
php计算title标题相似比的方法
Jul 29 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
PHP使用curl制作简易百度搜索
Nov 03 PHP
PHP获取真实客户端的真实IP
Mar 07 PHP
PHP+MYSQL实现读写分离简单实战
Mar 13 PHP
PHP扩展类型及安装方式解析
Apr 27 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
Mar 24 #PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 #PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 #PHP
PHP中关于php.ini参数优化详解
Feb 28 #PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 #PHP
php 的多进程操作实践案例分析
Feb 28 #PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 #PHP
You might like
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
PHP的PSR规范中文版
2013/09/28 PHP
ucenter通信原理分析
2015/01/09 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
通过jquery的$.getJSON做一个跨域ajax请求试验
2011/05/03 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
自己使用jquery写的一个无缝滚动的插件
2014/04/30 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
JS如何获取地址栏的参数实例讲解
2018/10/06 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
JavaScript实现图片合成下载的示例
2020/11/19 Javascript
用Python的线程来解决生产者消费问题的示例
2015/04/02 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
基于python绘制科赫雪花
2018/06/22 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Python之字典对象的几种创建方法
2020/09/30 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
求职信名称怎么写
2014/05/26 职场文书
授权委托书怎么写
2014/09/25 职场文书
2015元旦文艺汇演主持稿(开场白+结束语)
2014/12/14 职场文书