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 25 PHP
提升PHP性能的21种方法介绍
Jun 25 PHP
ThinkPHP多表联合查询的常用方法
Mar 24 PHP
typecho插件编写教程(一):Hello World
May 28 PHP
php等比例缩放图片及剪切图片代码分享
Feb 13 PHP
详解php中反射的应用
Mar 15 PHP
php实现多维数组排序的方法示例
Mar 23 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
分析php://output和php://stdout的区别
May 06 PHP
php使用json-schema模块实现json校验示例
Sep 28 PHP
phpStudy vscode 搭建debug调试的教程详解
Jul 28 PHP
浅谈如何提高PHP代码的质量
May 28 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网站开发中常用的8个小技巧
2015/02/13 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
兼容主流浏览器的iframe自适应高度js脚本
2014/01/10 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
bootstrap suggest下拉框使用详解
2017/04/10 Javascript
jQuery导航条固定定位效果实例代码
2017/05/26 jQuery
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
使用ionic(选项卡栏tab) icon(图标) ionic上拉菜单(ActionSheet) 实现通讯录界面切换实例代码
2017/10/20 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python中__init__和__new__的区别详解
2014/07/09 Python
Python对象转JSON字符串的方法
2016/04/27 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
Django中使用Celery的方法示例
2018/11/29 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
基于python实现地址和经纬度转换
2020/05/19 Python
lululemon美国官网:瑜伽服+跑步装备
2018/11/16 全球购物
普师专业个人自荐信范文
2013/11/26 职场文书
事业单位公务员的职业生涯规划
2014/01/15 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
校园活动宣传方案
2014/03/28 职场文书
运动会演讲稿100字
2014/08/25 职场文书
安全演讲稿开场白
2014/08/25 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python
python process模块的使用简介
2021/05/14 Python
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis