CoR(Chain of Responsibility)
职责链设计模式
我在 两种 CoR(一)
中讨论了传统的CoR实现:
但我感觉 让 每个处理器都持有后继处理器的引用,会增加处理器之间的耦合度.
下面是我的一些想法 和 具体实现:
(1)处理器 不持有 后继处理器的引用,引入一个新的角色 处理器容器(HandlerContainer
)
,由容器管理每个处理器,并且这个处理器容器 也是一个处理器(实现了Handler
接口),他的处理能力是容器里所有处理器的处理能力的和。
(2)一个处理器如果不能处理传递过来的请求,则抛出一个(CanNotHandleRequestException
)异常,
如果管理这个处理器的容器接受到这个异常,则将请求传递给容器中的下一个处理器。如果容器中的所有处理器都不能处理这个请求,则由容器抛出一个(CanNotHandleRequestException
)异常。
实现:与传统CoR相比,处理器接口(Handler
)不变,请求接口(Request
)和实现类不变。
1,增加CanNotHandleRequestException
异常类,当处理器不能处理传递过来的请求时就抛出这个异常。
public class CanNotHandleRequestException extends Exception{
private static final long serialVersionUID = 1L;
}
2,增加处理器容器类(HandlerContainer
),处理器容器类也实现了处理器接口,他的处理能力是容器里所有处理器的处理能力的和。
public class HandlerContainer implements Handler{
private List<Handler> handlers;
public HandlerContainer(){
handlers = new ArrayList<Handler>();
}
public boolean add(Handler handler){
return this.handlers.add(handler);
}
public boolean remove(Handler handler){
return this.handlers.remove(handler);
}
public void handleRequest(Request request) throws CanNotHandleRequestException{
int length = this.handlers.size();
for(int i = 0 ; i < length ; i++){
Handler handler = handlers.get(i);
try {
handler.handleRequest(request);
break;
} catch (CanNotHandleRequestException e) {
/*
* 如果处理器容器里的所有处理器都不能处理该请求,
* 则由容器抛出 CanNotHandleRequestException 异常。
*/
if(i == length-1) throw e;
}
}
}
}
3,实现处理器接口的实现类
HelpHandler
,PrintHandler
,SaveHandler
HelpHandler
处理 帮助请求(HelpRequest
)
public class HelpHandler implements Handler{
public void handleRequest(Request request) throws CanNotHandleRequestException {
if(request instanceof HelpRequest){
System.out.println("HelpHandler handle "+request.getClass().getSimpleName());
}else
throw new CanNotHandleRequestException();
}
}
PrintHandler
处理 打印请求(PrintRequest
)
public class PrintHandler implements Handler{
public void handleRequest(Request request) throws CanNotHandleRequestException{
if(request instanceof PrintRequest){
System.out.println("PrintHandler handle "+request.getClass().getSimpleName());
}else{
throw new CanNotHandleRequestException();
}
}
}
SaveHandler
处理 保存请求(SaveRequest
)
public class SaveHandler implements Handler{
public void handleRequest(Request request) throws CanNotHandleRequestException{
if(request instanceof SaveRequest){
System.out.println("SaveHandler handle "+request.getClass().getSimpleName());
}else{
throw new CanNotHandleRequestException();
}
}
}
4,客户端 Client
类
public class Client {
public static void main(String[] args) throws CanNotHandleRequestException{
HandlerContainer Container1 = new HandlerContainer();
Container1.add(new HelpHandler());
HandlerContainer Container2 = new HandlerContainer();
Container2.add(new PrintHandler());
Container2.add(new SaveHandler());
Container1.add(Container2);
Container1.handleRequest(new HelpRequest());
Container1.handleRequest(new PrintRequest());
Container1.handleRequest(new SaveRequest());
}
}
运行Client
类,输出如下
HelpHandler handle HelpRequest
PrintHandler handle PrintRequest
SaveHandler handle SaveRequest
分享到:
相关推荐
Sentinel-2是一项欧洲地球观测任务,提供地球陆地和沿海区域的高分辨率光学图像。 Level-1C产品是包含卫星观测地球表面信息的原始数据产品,而Level-2A产品是经过大气校正、几何校正和增强处理的加工数据产品,以便...
COR 截图文字识别最新版本,F4识别截图,可自定义设置快捷键。识别率高!
Cor-ls相关最小二乘法(二步法)实质上是先对数据进行一次相关分析,滤除了有色噪声的影响,再利用最小二乘法必然就会改善辨识结果。能适应较宽广的噪声范围,计算量不大,初始值对辨识结果影响较小。但要求输入信号...
PS和COR软件快捷键大全.pdf
清华山维 测绘软件 cor坐标文件转换程序。
Sen2Cor是欧洲空间局(ESA)委托的一种卫星影像处理软件,旨在对 Sentinel-2卫星影像进行处理和分析。Sen2Cor软件提供了从Level-1C到Level-2A的影像处理功能,可以对卫星影像进行大气矫正、radiometric correction、...
关于SEN2COR工具大气校正原理验证详解,介绍的很详细,主要还是中文版很难得
插件,21一月新下载,Sen2Cor-02.08.00-win64
理光Cor-C1现场维修手册
java跨域 jar包 cors-filter-2.4 java-property-utils-1.9.1,已经测试通过
Sentinel-2欧空局官方免费大气校正软件Sen2Cor 64位2.8版本。Sentinel-2 官方查询下载地址:欧空局 https://scihub.copernicus.eu/dhus/#/home
DBA2COR:一种适合协同网络QoS路由算法,章刚,陈庆奎,协同网络 QoS路由是当前研究的一个热点。针对启发式算法在路由选择过程中,由于算法收敛和资源更新较慢,容易造成单一节点负载不��
求两个正弦信号相关性,可根据需要更改相位进行求解。
Sentinel-2 Sen2Cor 大气校正步骤以及在SNAP中打开,哨兵2预处理
您公司员工手册全吗?不全的话这里有个原件,下载后直接修改LOGO就可以用了,公司必备!
批量处理sentinel-2影像数据,利用cen2cor插件,内包含sen2cor插件及python脚本
此文档详细描述了在win10系统下,利用Sen2cor插件对哨兵2号进行辐射定标和大气校正的处理流程
lee background corpus 是一个小型的英语语料,用于演示 word2vec 模型的 demo,以熟悉什么是词向量模型
sentinel2,哨兵二号批处理软件最新2.10版本