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 相关文章推荐
PHP 加密与解密的斗争
Apr 17 PHP
php之CodeIgniter学习笔记
Jun 17 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
php返回当前日期或者指定日期是周几
May 21 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
详解PHP发送邮件知识点
May 06 PHP
Linux下源码包安装Swoole及基本使用操作图文详解
Apr 02 PHP
Laravel中正确地返回HTTP状态码方法示例
Sep 10 PHP
PHP设计模式(七)组合模式Composite实例详解【结构型】
May 02 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 Try Catch异常测试
2009/03/01 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
php求一个网段开始与结束IP地址的方法
2015/07/09 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
基于jquery实现三级下拉菜单
2016/05/10 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
12条写出高质量JS代码的方法
2018/01/07 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
vue实现数据控制视图的原理解析
2020/01/07 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
[01:28:43]2014 DOTA2华西杯精英邀请赛5 24 DK VS CIS
2014/05/25 DOTA
Python设计模式之门面模式简单示例
2018/01/09 Python
Python读取txt内容写入xls格式excel中的方法
2018/10/11 Python
python实现复制大量文件功能
2019/08/31 Python
pygame实现成语填空游戏
2019/10/29 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
西班牙三叶草药房:Farmacias Trébol
2019/05/03 全球购物
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
分厂厂长岗位职责
2013/12/29 职场文书
实习生自我评价
2014/01/18 职场文书
体育课课后反思
2014/04/24 职场文书
护理专科学生自荐书
2014/07/05 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server
Java 多线程协作作业之信号同步
2022/05/11 Java/Android
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js