17. 星际争霸之php设计模式--职责链模式
题记
==============================================================================
本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦!
本文地址:http://www.cnblogs.com/davidhhuan/p/4248202.html
==============================================================================
星际的兵种属性随着对平衡性的调节,会进行修改。如果这样的话,我们就要考虑减少一个事件和具体处理的关联性。
比如一颗原子弹投下的瞬间,在杀伤范围内的部队或者建筑都会减少血,但是随着距离中心点的远近,受损程度是不同的,而且不同的兵种和建筑受损情况是不同的。
待解决的问题:原子弹投下的瞬间,将杀伤的处理分别交给杀伤范围内的部队或者建筑自己的方法处理。
思路:建立一个接口,让所有的部队或者建筑实现。
职责链模式(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);
?>
用途总结:职责链模式可以将一个涉及到多个对象的事件的处理交给对象自己处理,减少关联性。
实现总结:需要一个处理事件的接口,然后让所有的对象实现。
相关文章:
17. 星际争霸之php设计模式--职责链模式的更多相关文章
- 11. 星际争霸之php设计模式--备忘模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 8. 星际争霸之php设计模式--享元模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 7. 星际争霸之php设计模式--中介者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 6. 星际争霸之php设计模式--建造器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 5. 星际争霸之php设计模式--抽象工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 4. 星际争霸之php设计模式--工厂方法模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 3. 星际争霸之php设计模式--简单工厂模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
随机推荐
- GO语言练习:channel 缓冲机制
1.代码 2.运行 3.解析 1.代码 buffer.go package main import ( "fmt" "time" ) func readThre ...
- windows2008 IIS下配置FTP服务
一.服务器管理器 1.2008的系统使用服务器管理器,选择角色,因为我之前已经开启了IIS服务器角色,所以我现在只要添加角色服务即可,如果你没有开启过的话,直接添加角色即可. 2.选择WEB服务器,打 ...
- 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解
原文地址:http://www.cnblogs.com/landeanfen/archive/2016/04/06/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参 ...
- 收集的github的东西
1.voghDev/PdfViewPager-Android widget that can render PDF documents stored on SD card, linked as ass ...
- [zt]系统中常用MIPS指令
指令 功能 应用实例 LB 从存储器中读取一个字节的数据到寄存器中 LB R1, 0(R2) LH 从存储器中读取半个字的数据到寄存器中 LH R1, 0(R2) LW 从存储器中读取一个字的数据到寄 ...
- php 将查询出的数组数据存入redis
我们从数据库查询出来的数据一般为数组的形式, 而redis是不支持存入数组的, 一种解决办法是将数组转化为json数据,再将json存入redis,之后取出时再将json转化为php数组. 但将取出的 ...
- javascript 百度地图
官方地址 http://lbsyun.baidu.com/index.php?title=jspopular 示例地址 http://developer.baidu.com/map/jsdemo.ht ...
- array_sum函数 number array_sum
数组的概念 数组就是一个用来存储一系列变量值的命名区域,每个数组元素有一个相关的索引,也成为关键字,它可以用来访问元素. PHP允许间隔性地使用数字或字符串作为数组的索引. 2.数字索引数组 2.1 ...
- IOS第九天(3:QQ聊天界面通知的使用)
#import <Foundation/Foundation.h> #import "Person.h" #import "XQCompany.h" ...
- IOS第七天(5:UiTableView 汽车品牌,复杂模型分组展示,A-Z索要列表) (2015-08-05 14:03)
复杂模型分组展示 #import "HMViewController.h" #import "HMCarGroup.h" #import "HMCar ...