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&amp;&amp;mysql)三
Oct 09 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
Jul 23 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
Jul 15 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
PHP文件缓存内容保存格式实例分析
Aug 20 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
PHP实现向关联数组指定的Key之前插入元素的方法
Jun 06 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 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中如何实现常用邮箱的基本判断
2014/01/07 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
2015/04/15 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
JavaScript设计模式之命令模式实例分析
2019/01/16 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python实现连接postgresql数据库的方法分析
2017/12/27 Python
python查看模块安装位置的方法
2018/10/16 Python
详解Python匿名函数(lambda函数)
2019/04/19 Python
python如何读取bin文件并下发串口
2019/07/05 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
Python批量安装卸载1000个apk的方法
2020/04/10 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
一级方程式赛车官方网上商店:F1 Store(支持中文)
2018/01/12 全球购物
Hawes & Curtis澳大利亚官网:英国经典服饰品牌
2018/10/29 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
司法建议书范文
2014/05/13 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
小浪底导游词
2015/02/12 职场文书
第一节英语课开场白
2015/06/01 职场文书
小学教育见习总结
2015/06/23 职场文书
演讲比赛主持词
2015/06/29 职场文书
2015年四年级班主任工作总结
2015/10/22 职场文书
JavaWeb 入门篇:创建Web项目,Idea配置tomcat
2021/07/16 Java/Android