【设计模式】—— 职责链模式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 ...
随机推荐
- JAVA框架 Mybaits 输入和输出映射
一.输入映射 当前端传来的参数,比较复杂,比如说用户名称.订单单号.账号信息等等.后端有可能有多个projo类对应这些信息.我们需要把这些的projo类封装成一个类似一个vo类. 通过设置字段形式关联 ...
- MSMQ消息队列总结
1.总体介绍: http://www.cnblogs.com/beniao/archive/2008/06/26/1229934.html 2.windows服务各项参数介绍及安装 https://w ...
- day63
一.环境搭建 1.安装node 去官网下载node安装包 傻瓜式安装 万一安装后终端没有node环境,要进行node环境变量的配置(C:\Program Files\nodejs) 可以通过node提 ...
- ccf201703-2学生排队
问题描述 体育老师小明要将自己班上的学生按顺序排队.他首先让学生按学号从小到大的顺序排成一排,学号小的排在前面,然后进行多次调整.一次调整小明可能让一位同学出队,向前或者向后移动一段距离后再插入队列. ...
- [Oracle]查看数据是否被移入 DataBuffer 的方法
查看数据是否被移入 DataBuffer 的方法: 例如:表名为 tabxxx, 用户为U2: SQL> grant dba to u2 identified by u2;SQL> con ...
- [清华集训2015 Day2]矩阵变换-[稳定婚姻模型]
Description 给出一个N行M列的矩阵,保证满足以下性质: M>N. 矩阵中每个数都是 [0,N]中的自然数. 每行中, [1,N]中每个自然数刚好出现一次,其余的都是0. 每列中,[1 ...
- python 回溯法 子集树模板 系列 —— 14、最长公共子序列(LCS)
问题 输入 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) 输出 输出最长的子序列,如果有多个,随意输出1个. 输入示例 belong cnblogs 输出示例 blog ...
- vue-router单页应用简单示例(一)
请先完成了项目初始化,具体请看我另一篇博文.vue项目初始化 看一下完成的效果图,很典型的单页应用. .vue后缀名的单文件组件 这里先说一下我对组件的理解.组件,顾名思义就是一组元素组成的一个原 ...
- photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法
1.关闭防火墙和杀毒软件 2.删除注册表 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager目录,找到其中的 ...
- muduo网络库学习笔记(三)TimerQueue定时器队列
目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...