php设计模式之职责链模式实例分析【星际争霸游戏案例】

 更新时间:2020年03月27日 08:45:11   作者:DavidHHuan  
这篇文章主要介绍了php设计模式之职责链模式,结合星际争霸游戏案例形式分析了php职责链模式相关概念、原理、用法及操作注意事项,需要的朋友可以参考下

本文实例讲述了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面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)

    PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法)

    下面小编就为大家分享一篇PHP实现RSA加解密算法示例(生成密钥位数为1024位的方法),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • Laravel等框架模型关联的可用性浅析

    Laravel等框架模型关联的可用性浅析

    这篇文章主要给大家介绍了关于Laravel等框架模型关联的可用性的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel等框架具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • ThinkPHP的模版中调用session数据的方法

    ThinkPHP的模版中调用session数据的方法

    这篇文章主要介绍了ThinkPHP的模版中调用session数据的方法,需要的朋友可以参考下
    2014-07-07
  • PHP中关于php.ini参数优化详解

    PHP中关于php.ini参数优化详解

    在本篇文章里小编给大家整理的是关于PHP引擎php.ini参数优化的相关知识点,有兴趣的朋友们可以学习下。
    2020-02-02
  • PHPMailer发送HTML内容、带附件的邮件实例

    PHPMailer发送HTML内容、带附件的邮件实例

    这篇文章主要介绍了PHPMailer发送HTML内容、带附件的邮件实例,发送的内容包含图片和文字,附件则发送的一个EXCEL表,需要的朋友可以参考下
    2014-07-07
  • yii实现图片上传及缩略图生成的方法

    yii实现图片上传及缩略图生成的方法

    这篇文章主要介绍了yii实现图片上传及缩略图生成的方法,详细分析了图片的上传及缩略图的生成原理与实现方法,是非常实用的技巧,需要的朋友可以参考下
    2014-12-12
  • 深入分析php之面向对象

    深入分析php之面向对象

    本篇文章是对php中的面向对象进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • thinkphp框架使用JWTtoken的方法详解

    thinkphp框架使用JWTtoken的方法详解

    这篇文章主要介绍了thinkphp框架使用JWTtoken的方法,结合实例形式分析了JWTtoken的功能、原理及thinkPHP使用JWTtoken实现签名验证的相关操作技巧,需要的朋友可以参考下
    2019-10-10
  • PHP删除数组中空值的方法介绍

    PHP删除数组中空值的方法介绍

    这篇文章主要介绍了PHP删除数组中空值的方法介绍,需要的朋友可以参考下
    2014-04-04
  • 使用PHPCMS搭建wap手机网站

    使用PHPCMS搭建wap手机网站

    PHPCMS搭建PC端网站比较方便,但是在wap手机端方面却不怎么实用,而且自带的手机建站感觉不是很好,而且模版不好控制,现在对其进行修改,手机建站个人感觉比较方便。本文给大家介绍使用PHPCMS搭建wap手机网站,需要的朋友可以参考下
    2015-09-09

最新评论