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 相关文章推荐
一个高ai的分页函数和一个url函数
Oct 09 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
PHP 数组教程 定义数组
Oct 23 PHP
mcrypt启用 加密以及解密过程详细解析
Aug 07 PHP
PHP递归复制、移动目录的自定义函数分享
Nov 18 PHP
php获取访问者IP地址汇总
Apr 24 PHP
PHP多进程编程总结(推荐)
Jul 18 PHP
详解PHP文件的自动加载(autoloading)
Feb 04 PHP
PHP基于phpqrcode类生成二维码的方法详解
Mar 14 PHP
PHP创建XML接口示例
Jul 04 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 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
thinkphp模板用法和内容输出实例
2014/11/28 PHP
IE6 hack for js 集锦
2014/09/23 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
JavaScript性能优化总结之加载与执行
2016/08/11 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
小程序指纹验证的实现代码
2018/12/04 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
js实现无缝轮播图特效
2020/05/09 Javascript
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python写的Socks5协议代理服务器
2014/08/06 Python
Python解析树及树的遍历
2016/02/03 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
Python3数字求和的实例
2019/02/19 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
numpy np.newaxis 的实用分享
2019/11/30 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
教师节宣传方案
2014/05/23 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
财务会计求职信范文
2015/03/20 职场文书
比赛主持人开场白
2015/05/29 职场文书
如何用python插入独创性声明
2021/03/31 Python
react antd实现动态增减表单
2021/06/03 Javascript
使用Nginx搭载rtmp直播服务器的方法
2021/10/16 Servers
Java Spring读取和存储详细操作
2022/08/05 Java/Android