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 相关文章推荐
windows下PHP APACHE MYSQ完整配置
Jan 02 PHP
php一个找二层目录的小东东
Aug 02 PHP
PHP运行模式的深入理解
Jun 03 PHP
PHP连接SQLServer2005的方法
Jan 27 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
PHP打印输出函数汇总
Aug 28 PHP
PHP巧妙利用位运算实现网站权限管理的方法
Mar 12 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
Apr 20 PHP
PHP命名空间简单用法示例
Dec 28 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 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+Html+缓存
2006/12/20 PHP
基于MySQL体系结构的分析
2013/05/02 PHP
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
Yii2中如何使用modal弹窗(基本使用)
2016/05/30 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
JavaScript中的事件处理
2008/01/16 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
bootstrap select插件封装成Vue2.0组件
2017/04/17 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
仅利用30行Python代码来展示X算法
2015/04/01 Python
python清理子进程机制剖析
2017/11/23 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
Python对象属性自动更新操作示例
2018/06/15 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
Python reversed函数及使用方法解析
2020/03/17 Python
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
英国最大的滑板品牌选择:Route One
2019/09/22 全球购物
精致的手工皮鞋:Shoe Embassy
2019/11/08 全球购物
计算机个人求职信范例
2014/01/24 职场文书
代理班主任的自我评价
2014/02/04 职场文书
寄语是什么意思
2014/04/10 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
教师师德承诺书2016
2016/03/25 职场文书
员工工作失职检讨书范文!
2019/07/03 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js