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 相关文章推荐
如何使用PHP中的字符串函数
Oct 09 PHP
PHP Pear 安装及使用
Mar 19 PHP
PHP实现变色验证码实例
Jan 06 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
May 13 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
php新建文件的方法实例
Sep 26 PHP
php源码的使用方法讲解
Sep 26 PHP
解决在laravel中auth建立时候遇到的问题
Oct 15 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 PHP
PHP代码覆盖率统计详解
Jul 22 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 文本文件的读取效率
2012/02/10 PHP
PHP面向对象学习笔记之一 基础概念
2012/10/06 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
用js实现的一个Flash滚动轮换显示图片代码生成器
2007/03/14 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
javascript模拟post提交隐藏地址栏的参数
2014/09/03 Javascript
EasyUI加载完Html内容样式渲染完成后显示
2016/07/25 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
js读取本地文件的实例
2017/12/22 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
Python Django使用forms来实现评论功能
2016/08/17 Python
Python实现DDos攻击实例详解
2019/02/02 Python
Django 内置权限扩展案例详解
2019/03/04 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
django的csrf实现过程详解
2019/07/26 Python
python主要用于哪些方向
2020/07/05 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
2021/02/22 Python
药学专业个人的自我评价
2013/12/31 职场文书
应用英语专业自荐信
2014/01/26 职场文书
致百米运动员广播稿
2014/01/29 职场文书
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
四风问题查摆材料
2014/08/25 职场文书
房地产营销活动策划方案
2014/09/15 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers