【设计模式】—— 职责链模式ChainOfResponsibility
前言:【模式总览】——————————by xingoo
模式意图
避免请求的发送者,和接受者过度的耦合在一起。一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心。而请求的接受者可以自己处理它,也可以把它像链条一样向后传。
因此,请求也就意味着有可能丢失,或者说没有确切的安全保障。
应用场景
1 降低耦合度
2 增强指派职责的灵活性
3 不保证被接受
模式结构

Handler 定义一个接口,实现向后传递的过程
abstract class Handler{
protected Handler successor;
public abstract void handleRequest();
public Handler getSuccessor() {
return successor;
}
public void setSuccesor(Handler successor) {
this.successor = successor;
}
}
ConcreteHandler 可以负责请求,也可以向后传递
class ConcreteHandler extends Handler{
public void handleRequest(){
if(getSuccessor() != null){
System.out.println("getSuccessor !");
getSuccessor().handleRequest();
}else{
System.out.println("handle in this! request()!");
}
}
}
全部代码
package com.xingoo;
abstract class Handler{
protected Handler successor; public abstract void handleRequest(); public Handler getSuccessor() {
return successor;
} public void setSuccesor(Handler successor) {
this.successor = successor;
} }
class ConcreteHandler extends Handler{
public void handleRequest(){
if(getSuccessor() != null){
System.out.println("getSuccessor !");
getSuccessor().handleRequest();
}else{
System.out.println("handle in this! request()!");
}
}
}
public class Client {
public static void main(String[] args) {
Handler handle1,handle2,handle3;
handle1 = new ConcreteHandler();
handle2 = new ConcreteHandler();
handle3 = new ConcreteHandler();
handle1.setSuccesor(handle2);
handle2.setSuccesor(handle3);
handle1.handleRequest();
}
}
运行结果
getSuccessor !
getSuccessor !
handle in this! request()!
【设计模式】—— 职责链模式ChainOfResponsibility的更多相关文章
- 17. 星际争霸之php设计模式--职责链模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- JAVA 设计模式 职责链模式
用途 职责链模式 (Chain Of Responsibility) 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系. 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个 ...
- 深入浅出设计模式——职责链模式(Chain of Responsibility Pattern)
模式动机 职责链可以是一条直线.一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求.链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并使请求沿着链传 ...
- C++设计模式——职责链模式
什么是职责链模式? 在GOF的<设计模式:可复用面向对象软件的基础>一书中对职责链模式是这样说的:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条 ...
- 设计模式:职责链模式(Chain of Responsibility)
去年参加校招要到长沙来,这个对于我来说不是特别喜欢(但又必须的来,谁叫咱不是985.211的娃呢),但是对于某些人来说就是福音了.大四还有课,而且学校抓的比较严,所以对于那些想翘课的人来说这个是最好不 ...
- C#设计模式——职责链模式(Chain Of Responsibility Pattern)
一.概述 在软件开发中,某一个对象的请求可能会被多个对象处理,但每次最多只有一个对象处理该请求,对这类问题如果显示指定请求的处理对象,那么势必会造成请求与处理的紧耦合,为了将请求与处理解耦,我们可以使 ...
- C++设计模式---职责链模式
职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止. 这里发出这个请求的客户端并不知道这当中的哪一 ...
- javascript设计模式——职责链模式
前面的话 职责链模式的定义是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止.职责链模式的名字非常形象,一 ...
- 职责链模式ChainOfResponsibility
原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11407114.html 1.定义 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合 ...
- java设计模式---职责链模式
职责链的本质:分离职责,动态组合 样例: /** * 定义职责对象的接口 * */ public abstract class Handler { protected Handler successo ...
随机推荐
- css动画,展开折叠图标
@keyframes packupArrowFlow { 0% { bottom:; } 70% { bottom: 10px; } } @-webkit-keyframes packupArrowF ...
- $\mathcal{Friends' \ \ Links}$友情链接
\(\mathcal{JuLao \ \& \ \ Dalao}\) \(\_rqy\) \(\_stdcall\) 并(吊)肩(锤)奋(死)斗(我)的\(Oier\) 王旭 苑骏康 张梓淳 ...
- RTSP server 在mips 上莫名其妙退出(PC上则无此问题)
http://blog.csdn.net/lubing20044793/article/details/38523701 早在这篇blog以前写过,在虚拟机下调试sn9c291时,USB 数据传输出了 ...
- 王立平--查看SQLite中的数据信息
Eclipse菜单Window - Open Perspective - DDMS进入DDMS视图. 然后File Explorer View中依次展开路径/data/data/package_nam ...
- 【H5】直接拨打电话
一般<a href="tel:400-663-5999">400-663-5999</a>实现. 而形如<a href="tel:*9204 ...
- CM (Cloudera Manager) 的安装,便于CDH的离线部署
一.准备工作 主机个数:n台 操作系统:CentOS 6.5 安装所需软件包: CM: cloudera-manager-el6-cm5.4.3_x86_64.tar.gz CDH parcel: C ...
- Exp3
利用不同免杀方式生成文件 1.msfvenom 使用msfvenom命令查看功能介绍 其中有: -p 选择一个载荷(或者叫模块) -l 载荷列表 -f 生成的文件格式 -e 编码方式 -l 编码次数 ...
- 预定义的类型“System.Object”未定义或未导入
打开一个以前的程序 ,发现报这个错误.检查了程序,发现程序的引用 System 不见了 ,尝试 引用失败.. 查了有人说重新建立 Sln文件有用.. 一头雾水,随后 尝试操作 ,程序有用了 具体步骤: ...
- 【arm学习】我的第一个裸板程序
初学ARM感觉写个裸板程序还真的不容易,可能是没有用到ADS,keil之类的开发平台的缘故吧.编译,链接过程在linux平台上完成,这样学起来更有实感,还能顺便熟悉linux环境,以及命令,何乐而不为 ...
- 一些IT中的工具介绍
1. 史上最全github使用方法:github入门到精通 2. Git教程 3. GIT与GitHub使用简介 简单来说,git是一种版本控制系统.跟svn.cvs是同级的概念.github是一个网 ...