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加速网络传输
Oct 09 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
php 远程图片保存到本地的函数类
Dec 08 PHP
php5.3 废弃函数小结
May 16 PHP
PHP如何抛出异常处理错误
Mar 02 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
php json中文编码为null的解决办法
Dec 14 PHP
PHP实现的简单适配器模式示例
Jun 22 PHP
php双层循环(九九乘法表)
Oct 23 PHP
php分享朋友圈的实现代码
Feb 18 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
May 01 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
WHOIS类的修改版
2006/10/09 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
php用户名的密码加密更安全的方法
2019/06/21 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
javascript 动态创建表格
2015/01/08 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
无循环 JavaScript(map、reduce、filter和find)
2017/04/08 Javascript
javascript 中null和undefined区分和比较
2017/04/19 Javascript
JS实现为动态添加的元素增加事件功能示例【基于事件委托】
2018/03/21 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
Vue组件间的通信pubsub-js实现步骤解析
2020/03/11 Javascript
python自动安装pip
2014/04/24 Python
Python实现的最近最少使用算法
2015/07/10 Python
python 时间戳与格式化时间的转化实现代码
2016/03/23 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
python DataFrame转dict字典过程详解
2019/12/26 Python
python求一个字符串的所有排列的实现方法
2020/02/04 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
python statsmodel的使用
2020/12/21 Python
全球立体声:World Wide Stereo
2018/09/29 全球购物
介绍一下linux的文件权限
2014/07/20 面试题
应届行政管理专业个人自我评价
2013/12/28 职场文书
电工技术比武方案
2014/05/11 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
家庭贫困证明
2015/06/16 职场文书
教师网络培训心得体会
2016/01/09 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python
Ajax实现异步加载数据
2021/11/17 Javascript