博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式——责任链模式
阅读量:6075 次
发布时间:2019-06-20

本文共 1829 字,大约阅读时间需要 6 分钟。

 

责任链模式:将能够处理同一类请求的对象连成一条链所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,

                 如果能则处理,如果不能则传递给链上的下一个对象。

优点:将请求者和发送者解耦
         简化对象的处理过程
         可以通过改变链中的成员或成员的顺序来动态的新增或则删除责任。

缺点:不能保证请求一定会执行,可能或落到责任链之外。

         不容易观察运行时的特征,处理请求的方法比较分散。

实现方式:链表和非链表两种实现,但是使用集合和数组等非链表实现在实际开发中更方便更常用。

应用:

窗口事件的处理。

Java中的异常机制就是一种责任链模式,catch链就是一种责任链。
JavaScript中的时间冒泡和捕获机制。
Servlet中的过滤器的链式处理。
Structs2中拦截器的调用。

这个解释很详细:

Demo:

 

package com.wxisme.chainofresposibility;/** * 责任链 * @author wxisme * */public abstract class Handler {	protected Handler nextHandler;	public abstract void handleRequest(int req);	public Handler getNextHandler() {		return nextHandler;	}	public void setNextHandler(Handler nextHandler) {		this.nextHandler = nextHandler;	}	}class ConcreteHandler1 extends Handler {		@Override	public void handleRequest(int req) {		if(req == 1) {			System.out.println("1处理请求");		}		else {			System.out.println("1释放请求");			this.nextHandler.handleRequest(req);		}	}}class ConcreteHandler2 extends Handler {		@Override	public void handleRequest(int req) {		if(req == 2) {			System.out.println("2处理请求");		}		else {			System.out.println("2释放请求");			this.nextHandler.handleRequest(req);		}	}}class ConcreteHandler3 extends Handler {		@Override	public void handleRequest(int req) {		if(req == 3) {			System.out.println("3处理请求");		}		else {			System.out.println("3释放请求");			this.nextHandler.handleRequest(req);		}	}}public class Client {	public static void main(String[] args) {		Handler h1 = new ConcreteHandler1();		Handler h2 = new ConcreteHandler2();		Handler h3 = new ConcreteHandler3();				h1.setNextHandler(h2);		h2.setNextHandler(h3);				h1.handleRequest(1);		System.out.println("-----------");		h1.handleRequest(2);		System.out.println("-----------");		h1.handleRequest(3);	}}

 

 运行结果:

1处理请求
-----------
1释放请求
2处理请求
-----------
1释放请求
2释放请求
3处理请求

 

转载于:https://www.cnblogs.com/wxisme/p/4550712.html

你可能感兴趣的文章
Flutter日历,可以自定义风格UI
查看>>
java 零基础快速入门到初中级路线2019快速成长为java初级中级工程师
查看>>
机器学习常用的5种学习框架
查看>>
精读《V8 引擎 Lazy Parsing》
查看>>
从零开发一个健壮的npm包
查看>>
Swift3、4中的@objc、@objcMembers和dynamic
查看>>
前端好文章
查看>>
三方登录
查看>>
React Native实现一个带筛选功能的搜房列表(2)
查看>>
前端学习(三):浅拷贝和深拷贝
查看>>
使用Python编写一个渗透测试探测工具
查看>>
nginx反向代理、文件批量改名及统计ip访问量等精髓总结
查看>>
当前端玩起 CoolQ:做个技术文章推送机器人
查看>>
npm入门,这篇就够了
查看>>
搞定JavaScript算法系列--堆排序
查看>>
BitcoinSV node v0.1.1 版本更新解读
查看>>
iOS面试问答集锦,从容应对各种面试技术难题!
查看>>
《YYModel源码分析(二)NSObject+YYModel》
查看>>
实用抓包工具:whistle
查看>>
Terraform 企业版支持“Policy Sets”
查看>>