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 相关文章推荐
用PHP4访问Oracle815
Oct 09 PHP
用PHP查询域名状态whois的类
Nov 25 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
在PHP中实现Javascript的escape()函数代码
Aug 08 PHP
浅析is_writable的php实现
Jun 18 PHP
php多文件上传实现代码
Feb 20 PHP
php采用curl模仿登录人人网发布动态的方法
Nov 07 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
php foreach如何跳出两层循环(详解)
Nov 05 PHP
对于Laravel 5.5核心架构的深入理解
Feb 22 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
PHP7 新增常量
Mar 09 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 addslashes 函数详细分析说明
2009/06/23 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
2014/01/02 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
js运动事件函数详解
2016/10/21 Javascript
js代码实现下拉菜单【推荐】
2016/12/15 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
js实现自定义滚动条的示例
2020/10/27 Javascript
[01:15:00]LGD vs Mineski Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
基于python的七种经典排序算法(推荐)
2016/12/08 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
Python 实现选择排序的算法步骤
2018/04/22 Python
对python的输出和输出格式详解
2018/12/08 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
python面试题之列表声明实例分析
2019/07/08 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
白岩松演讲
2014/05/21 职场文书
拓展训练激励口号
2014/06/17 职场文书
教师党员整改措施
2014/10/24 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书