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 相关文章推荐
3
Oct 09 PHP
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
php在线代理转向代码
May 05 PHP
php批量删除cookie的简单实现方法
Jan 26 PHP
php简单统计在线人数的方法
May 10 PHP
php基于PDO连接MSSQL示例DEMO
Jul 13 PHP
php实现带读写分离功能的MySQL类完整实例
Jul 28 PHP
Laravel中任务调度console使用方法小结
May 07 PHP
PHP实现网站访问量计数器
Oct 27 PHP
Yii1.1框架实现PHP极光推送消息通知功能
Sep 06 PHP
详解PHP素材图片上传、下载功能
Apr 12 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 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
域名查询代码公布
2006/10/09 PHP
codeigniter教程之多文件上传使用示例
2014/02/11 PHP
php htmlentities()函数的定义和用法
2016/05/13 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
使用jquery实现放大镜效果
2014/09/02 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jQuery实现径向动画菜单效果
2015/07/17 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
jQuery实现移动端手机商城购物车功能
2016/09/24 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
2017/04/22 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
python实现栅栏加解密 支持密钥加密
2019/03/20 Python
python圣诞树编写实例详解
2020/02/13 Python
python实现批量命名照片
2020/06/18 Python
HTML5 Canvas的常用线条属性值总结
2016/03/17 HTML / CSS
草莓网化妆品加拿大网站:Strawberrynet Canada
2016/09/20 全球购物
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
大唐面试试题(CPU,UNIX等等)
2012/01/11 面试题
幼教简历自我评价
2014/01/28 职场文书
结婚典礼主持词
2015/06/29 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
医院病假条范文
2015/08/17 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书