php设计模式之职责链模式实例分析【星际争霸游戏案例】


Posted in PHP onMarch 27, 2020

本文实例讲述了php设计模式之职责链模式。分享给大家供大家参考,具体如下:

星际的兵种属性随着对平衡性的调节,会进行修改。如果这样的话,我们就要考虑减少一个事件和具体处理的关联性。

比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。

待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。

思路:建立一个接口,让所有的部队或者建筑实现。

职责链模式(Chain of Responsibility)示例:

<?php
  //被原子弹攻击的接口
  interface NuclearAttacked 
  {
    //处理被原子弹攻击的方法,参数为投放点的x和y坐标
    public function NuclearAttacked($x, $y);
  }

  //人族的基地,实现被原子弹攻击的接口,其他的内容暂时不考虑
  class CommandCenter implements NuclearAttacked 
  {
    //处理被原子弹攻击的方法,参数为投放点的x和y坐标
    public function NuclearAttacked($x, $y)
    {
      //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉
    }
  }

  //巡洋舰(俗称大和),实现被原子弹攻击的接口,其他的内容暂时不考虑
  class Battlecruiser implements NuclearAttacked 
  {
    //处理被原子弹攻击的方法,参数为投放点的x和y坐标
    public function NuclearAttacked($x, $y)
    {
      //根据离原子弹中心的距离,定义减少的血,如果超出了剩余的血,就炸掉
    }
  }

  //原子弹类
  class Nuclear 
  {
    //被原子弹攻击的对象
    public $attackedThings;

    //添加被原子弹攻击的对象
    public function addAttackedThings($thing)
    {
      //添加被原子弹攻击的对象
      $this->attackedThings[] = $thing;
    }

    //原子弹爆炸的方法,参数为投放点的x和y坐标
    public function blast($x, $y)
    {
      //把爆炸的事情交给所有涉及的对象,让他们自己处理
      foreach ($this->attackedThings as $thing)
      {
        //把爆炸的事情交给所有涉及的对象,让他们自己处理
        $thing->NuclearAttacked($x, $y);
      }
    }
  }

  //新建一个基地对象
  $CommandCenter = new CommandCenter();

  //新建一个巡洋舰对象
  $Battlecruiser = new Battlecruiser();

  //造了一颗原子弹
  $Nuclear2 = new Nuclear();

  //假设投放成功,那个瞬间一个基地对象和一个巡洋舰对象在杀伤范围内
  $Nuclear2->addAttackedThings($CommandCenter);
  $Nuclear2->addAttackedThings($Battlecruiser);

  //原子弹爆炸,这样就把这个事件交给那些涉及的对象的处理方法,假设投放点的x和y坐标是2353, 368
  $Nuclear2->blast(2353, 368);
?>

用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。

实现总结:需要一个处理事件的接口,然后让所有的对象实现。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
解析PHP函数array_flip()在重复数组元素删除中的作用
Jun 27 PHP
图解找出PHP配置文件php.ini的路径的方法
Aug 20 PHP
PHP程序员必须清楚的问题汇总
Dec 18 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
php生成年月日下载列表的方法
Apr 24 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
Jul 09 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
Nov 12 PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
Mar 27 #PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 #PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 #PHP
Centos7安装swoole扩展操作示例
Mar 26 #PHP
PHP开发api接口安全验证操作实例详解
Mar 26 #PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 #PHP
php中加密解密DES类的简单使用方法示例
Mar 26 #PHP
You might like
用php实现像JSP,ASP里Application那样的全局变量
2007/01/12 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
php数组转成json格式的方法
2015/03/09 PHP
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
jquery实现图片上传前本地预览功能
2016/05/10 Javascript
jQuery解决$符号命名冲突
2016/06/18 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
js canvas实现二维码和图片合成的海报
2020/11/19 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
react写一个select组件的实现代码
2019/04/03 Javascript
手把手教你使用TypeScript开发Node.js应用
2019/05/06 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
[02:19]DOTA2女子战队FOX视频专访:希望更多美眉一起加入
2013/10/15 DOTA
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python的装饰器用法学习笔记
2016/06/24 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
python实现控制台打印的方法
2019/01/12 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python写日志文件操作类与应用示例
2019/07/01 Python
python判断一个对象是否可迭代的例子
2019/07/22 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
暑期研修感言
2014/02/17 职场文书
小班教师个人总结
2015/02/05 职场文书
2016年村干部公开承诺书(公开承诺事项)
2016/03/25 职场文书