设计模式之责任链模式
来源:互联网 发布:dwg用什么软件 编辑:程序博客网 时间:2024/06/11 14:58
责任链模式
多个对象都有可能处理请求,这些对象形成一条链,请求在这条责任链上传递,直到有一个对象对该请求进行处理。发出请求的客户并不知道这个请求到底会被谁处理。
纯的责任链模式:
对于一个请求,一个处理者之后做出两种处理:一是处理该请求,二是无法处理转发给下一任处理者进行处理。请求在责任链中一定会得到处理。不允许一个处理者处理了部分责任又将责任转给下一任进行处理
不纯的责任链模式:
一个请求最终可以不被任何一个处理者进行处理。
涉及到的有:
抽象处理者角色:定义一个处理请求的接口以及一个后继者(以形成一条责任链)
具体处理者角色:实现抽象处理者角色接口
客户类(发出请求):向一条责任链上的某一个具体处理者发送请求。
举个栗子:在学校请假的情况,处理者分为任课老师—>年级辅导员—>学院院领导
请假只需要请一节课的时候,直接告诉任课老师一声就好啦~没必要去找导员要假条了
要 1天<请假时间<2周 的时候,哇!一周都不在学校,还是告诉一下辅导员吧
像博主现在这样,要在外边实习,回去上不了课了,考试的时候再回去好了~那就请3周假吧(甚至更长),辅导员说她处理不了了,去找学院院领导签字才行。
抽象处理者角色:
/** * Description:抽象处理者,定义一个处理请求的方法、后继处理者 */public abstract class IHandler { private IHandler handler; public abstract boolean approve(double day); public IHandler getHandler() { return handler; } public void setHandler(IHandler handler) { this.handler = handler; }}
具体的处理者角色:
/** * Description:任课老师,可以批准小于一天的假 */public class Teacher extends IHandler { public boolean approve(double day) { if(day<1){ System.out.println("请假时间为:"+day+"天,任课老师批准"); return true; }else { System.out.println("请假时间为:"+day+"天,任课老师无权批准,去找辅导员吧"); return getHandler().approve(day); } }}
/** * Description:辅导员,大于一天小于两周的假都可以批准的 */public class Instructor extends IHandler { public boolean approve(double day) { if(day<10){ System.out.println("请假时间为:"+day+"天,辅导员批准"); return true; }else { System.out.println("请假时间为:"+day+"天,辅导员无权批准,去找院领导吧"); return getHandler().approve(day); } }}
/** * Description:院领导,超过两周的假都是他批准的 */public class Leader extends IHandler { public boolean approve(double day) { System.out.println("请假时间为:"+day+"天,院领导批准"); return true; }}
测试类:
public class Test { public static void main(String[] args){ Teacher teacher = new Teacher(); Instructor instructor = new Instructor(); Leader leader = new Leader(); teacher.setHandler(instructor); instructor.setHandler(leader); System.out.println("--------遇见请假0.5天----------"); teacher.approve(0.5); System.out.println("--------遇见请假20天----------"); teacher.approve(20); }}
运行结果
By the way:责任链模式当中的“链”如果太长,不易于维护,所以如果责任链太长,一般采用和其他的设计模式组合使用。后续会介绍到。
阅读全文
0 0
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之【责任链】
- 设计模式之责任链
- 设计模式之责任链
- 设计模式之责任链
- 十 设计模式之责任链模式
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 【设计模式】之责任链模式
- java设计模式之责任链模式
- 设计模式之(责任链模式)
- 设计模式之--责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- 设计模式之责任链模式
- NVIDIA驱动安装
- 软件工程概述
- AngualrJs 最新 文件图片上传教程2:Client-Controller-modal
- ERROR: Kernel configuration is invalid.
- hdu 4511 小明系列故事——女友的考验
- 设计模式之责任链模式
- Android-简单的轮播图控件BannerView
- 测试对话框显示
- 不同媒体容器封装层的timebase分析
- hdu 5366 The mook jong 【dp】
- 关于微信开发模式创建菜单失败 errcode:48001 errmsg:api unauthorized hint: [9U7bga0176vr44!]的解释
- uva 10008 What's Cryptanalysis?
- 用两个栈来实现一个队列
- c++编译过程简介