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 相关文章推荐
windows xp下安装pear
Dec 02 PHP
php+dojo 的数据库保存拖动布局的一个方法dojo 这里下载
Mar 07 PHP
php项目打包方法
Feb 18 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
php截取字符串之截取utf8或gbk编码的中英文字符串示例
Mar 12 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
php图片的二进制转换实现方法
Dec 15 PHP
php银联网页支付实现方法
Mar 04 PHP
WordPress中查询文章的循环Loop结构及用法分析
Dec 17 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
php文件上传原理与实现方法详解
Dec 20 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中HTML标签过滤技巧
2014/01/07 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php基于session实现数据库交互的类实例
2015/08/03 PHP
完美解决在ThinkPHP控制器中命名空间的问题
2017/05/05 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
Javascript之Date对象详解
2016/06/07 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
bootstrap table表格客户端分页实例
2017/08/07 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
微信小程序自定义modal弹窗组件的方法详解
2020/12/20 Javascript
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
python 列表降维的实例讲解
2018/06/28 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
Python计算不规则图形面积算法实现解析
2019/11/22 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
大二自我鉴定范文
2013/10/05 职场文书
科级干部考察材料
2014/02/15 职场文书
单位授权委托书范文
2014/08/02 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
正规借条模板
2015/05/26 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记
python数字图像处理之图像的批量处理
2022/06/28 Python