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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
剖析 PHP 中的输出缓冲
Dec 21 PHP
一些常用的php简单命令代码集锦
Sep 24 PHP
生成随机字符串和验证码的类的PHP实例
Dec 24 PHP
php根据身份证号码计算年龄的实例代码
Jan 18 PHP
PHP中的use关键字概述
Jul 23 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
再Docker中架设完整的WordPress站点全攻略
Jul 29 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
PHP实现验证码校验功能
Nov 16 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 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的实现代码
2010/06/20 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
在云虚拟主机部署thinkphp5项目的步骤详解
2017/12/21 PHP
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
js小数运算出现多位小数如何解决
2015/10/08 Javascript
JSON与String互转的实现方法(Javascript)
2016/09/27 Javascript
JavaScript 对象详细整理总结
2016/09/29 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
微信小程序之绑定点击事件实例详解
2017/07/07 Javascript
JavaScript时间戳与时间日期间相互转换
2017/12/11 Javascript
浅析JS抽象工厂模式
2017/12/14 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
Nodejs中怎么实现函数的串行执行
2019/03/02 NodeJs
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
Element-ui upload上传文件限制的解决方法
2021/01/22 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python 支付整合开发包的实现
2019/01/23 Python
详解Python数据分析--Pandas知识点
2019/03/23 Python
Python 学习教程之networkx
2019/04/15 Python
市场营销专业应届生自荐信
2014/06/19 职场文书
电话营销开场白
2015/05/29 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
了解Kubernetes中的Service和Endpoint
2022/04/01 Servers
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
Redis基本数据类型String常用操作命令
2022/06/01 Redis
Docker安装MySql8并远程访问的实现
2022/07/07 Servers