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 相关文章推荐
MySQL修改密码方法总结
Mar 25 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
smarty 缓存控制前的页面静态化原理
Mar 15 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
浅析php数据类型转换
Jan 09 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
php正则替换处理HTML页面的方法
Jun 17 PHP
php实现三级级联下拉框
Apr 17 PHP
php使用file函数、fseek函数读取大文件效率对比分析
Nov 04 PHP
Yii框架表单提交验证功能分析
Jan 07 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 备份数据库代码(生成word,excel,json,xml,sql)
2013/06/23 PHP
php中current、next与reset函数用法实例
2014/11/17 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
js从外部获取图片的实现方法
2016/08/05 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
jquery插件开发模式实例详解
2019/07/20 jQuery
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
使用Typescript开发微信小程序的步骤详解
2021/01/12 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Python设计模式之门面模式简单示例
2018/01/09 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
Windows下PyCharm安装图文教程
2018/08/27 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
CSS3制作酷炫的三维相册效果
2016/07/01 HTML / CSS
html5 canvas绘制网络字体的常用方法
2019/08/26 HTML / CSS
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
Android面试宝典
2013/08/06 面试题
美容院经理岗位职责
2014/04/03 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
甜品店创业计划书
2014/08/14 职场文书
2015年度护士个人工作总结
2015/04/09 职场文书
尝试使用Python爬取城市租房信息
2022/04/12 Python