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 相关文章推荐
ADODB的数据库封包程序库
Dec 31 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
PHP array_push 数组函数
Dec 26 PHP
PHP引用(&amp;)各种使用方法实例详解
Mar 20 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
Jun 30 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
PHP简单创建压缩图的方法
Aug 24 PHP
PHP explode()函数用法讲解
Feb 15 PHP
如何判断微信付款码和支付宝付款码
Apr 01 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发送http请求的常用方法分析
2016/11/08 PHP
PHP中Laravel 关联查询返回错误id的解决方法
2017/04/01 PHP
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
jQuery学习笔记(3)--用jquery(插件)实现多选项卡功能
2013/04/08 Javascript
javascript数组克隆简单实现方法
2015/12/16 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
jQuery图片轮播功能实例代码
2017/01/29 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
layui表格内放置图片,并点击放大的实例
2019/09/10 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python中的zipfile模块使用详解
2015/06/25 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
Python线性方程组求解运算示例
2018/01/17 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
python实现监控某个服务 服务崩溃即发送邮件报告
2018/06/21 Python
基于python实现聊天室程序
2018/07/27 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
Python字符串匹配之6种方法的使用详解
2019/04/08 Python
为什么称python为胶水语言
2020/06/16 Python
python中实现词云图的示例
2020/12/19 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
小学教师自我鉴定
2013/11/07 职场文书
模具设计与制造专业求职信
2014/07/19 职场文书
市场调研项目授权委托书范本
2014/10/04 职场文书
个人汇报材料范文
2014/12/30 职场文书
大学生个人学年总结
2015/02/15 职场文书
实习单位推荐信
2015/03/27 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
MySQL的存储过程和相关函数
2022/04/26 MySQL