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 相关文章推荐
isset和empty的区别
Jan 15 PHP
PHP 字符串编码截取函数(兼容utf-8和gb2312)
May 02 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
ucenter通信原理分析
Jan 09 PHP
php比较相似字符串的方法
Jun 05 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
PHP实现的回溯算法示例
Aug 15 PHP
详解php中生成标准uuid(guid)的方法
Apr 28 PHP
PHP反射学习入门示例
Jun 14 PHP
tp5.1 框架数据库-数据集操作实例分析
May 26 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函数
2008/10/03 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
2014/03/16 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
2016/01/27 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
Vue过滤器的用法和自定义过滤器使用
2017/02/08 Javascript
NodeJS处理Express中异步错误
2017/03/26 NodeJs
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
JS实现网站吸顶条
2020/01/08 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
Python判断操作系统类型代码分享
2014/11/22 Python
python图像处理之反色实现方法
2015/05/30 Python
Python的argparse库使用详解
2018/10/09 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
2019/07/19 Python
浅析Python3 pip换源问题
2020/01/06 Python
python 生成任意形状的凸包图代码
2020/04/16 Python
电子专业推荐信范文
2013/11/18 职场文书
大学班级计划书
2014/04/29 职场文书
党委书记个人检查对照材料思想汇报
2014/10/11 职场文书
公路施工安全责任书
2015/05/08 职场文书
就业推荐表院系意见
2015/06/05 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
一些让Python代码简洁的实用技巧总结
2021/08/23 Python
JavaScript实现九宫格拖拽效果
2022/06/28 Javascript