【Java设计模式】· 职责链模式(Chain of Responsibility)
来源:互联网 发布:如何建立网站域名 编辑:程序博客网 时间:2024/06/06 00:25
职责链模式:
1.觉得学过的东西如果不记下来就太浪费了,还会经常忘掉,于是乎开始写博客。我只是一个菜鸟程序员,但有一颗向往技术大牛的心。
2.职责链模式:当一个问题需要经过“重重考虑”才能给出结果时,这样的“重重考虑”的过程,需要用到职责链模式。职责链模式中,有多个负责不同职责的handler,当handlerA解决不了问题时,会交给handlerB,而如果handlerB也不能解决时,就会交给handlerC····以此类推,直到最后一个handler。
Handler : 责任人的父类
ConcreteHandler:责任人的具体类
3.例子: 学生要向学校请假,如果请假天数<3天,只需要老师批准,而3天<请假天数<7天则需要级长批准,7天以上的请假需要校长批准,这时候需要用到职责链模式。
首先新建一个Handler类,所有处理问题的人都是Handler的子类
package pers.reus.model.handler.impl;public abstract class Handler {//创建职责链的连接者protected Handler successor = null;//设置下一个处理的对象public void setSuccessor(Handler successor){this.successor = successor;}//获得下一个处理对象public Handler getSuccessor(){return successor;}/** * 处理学生请假的方法 * student 学生姓名 * day 请假天数 * **/public abstract String HandlerRequest(String student, int day);}
接下来分别创建 教师,级长,校长 三种责任人,他们都继承Handler
教师:
package pers.reus.model.handler;import pers.reus.model.handler.impl.Handler;public class Teacher extends Handler {public String HandlerRequest(String student, int day){//处理请假结果以String返回String msg = null;//请假少于3天,只需老师同意if(day <= 3){msg = "老师同意 " + student + " 请假 " + day + " 天";}else{//当存在下一个处理对象时,老师处理不了的请假交由下一个对象处理if(getSuccessor() != null){ System.out.println("老师无权同意 " + student + " 请假 " + day + " 天");return getSuccessor().HandlerRequest(student,day);}}//返回请假结果return msg;}}
级长:
package pers.reus.model.handler;import pers.reus.model.handler.impl.Handler;public class Prefect extends Handler{public String HandlerRequest(String student, int day) {//处理请假结果以String返回String msg = null;//请假少于7天,只需级长同意if(day <= 7){msg = "级长同意 " + student + " 请假 " + day + " 天";}else{//当存在下一个处理对象时,级长处理不了的请假交由下一个对象处理if(getSuccessor() != null){System.out.println("级长无权同意 " + student + " 请假 " + day + " 天");return getSuccessor().HandlerRequest(student,day);}}//返回请假结果return msg;}}
校长:
package pers.reus.model.handler;import pers.reus.model.handler.impl.Handler;public class SchoolMaster extends Handler{public String HandlerRequest(String student, int day) {//处理请假结果以String返回String msg = null;//请假大于7天,需要校长同意if(day > 7){msg = "校长同意 " + student + " 请假 " + day + " 天";}else{//当存在下一个处理对象时,校长处理不了的请假交由下一个对象处理if(getSuccessor() != null){System.out.println("校长无权同意 " + student + " 请假 " + day + " 天");return getSuccessor().HandlerRequest(student,day);}}//返回请假结果return msg;}}
最后,创建client类测试:
package pers.reus.model.client;import pers.reus.model.handler.Prefect;import pers.reus.model.handler.SchoolMaster;import pers.reus.model.handler.Teacher;import pers.reus.model.handler.impl.Handler;public class Client {public static void main(String[] args) {//创建 教师,级长,校长 三个类Handler teacher = new Teacher(); Handler prefect = new Prefect(); Handler schoolMaster = new SchoolMaster(); //设置责任关系,教师无法处理交给级长,级长无法处理交给校长 teacher.setSuccessor(prefect); prefect.setSuccessor(schoolMaster); //模拟学生进行请假 String str = teacher.HandlerRequest("小明",8); //输出请假结果 System.out.println(str);}}
0 0
- Java设计模式-----Chain of Responsibility职责链模式
- Java设计模式-----Chain of Responsibility职责链模式
- JAVA设计模式十一--Chain of Responsibility(职责链模式)
- java设计模式之职责链模式 Chain of Responsibility
- Java设计模式十一: 职责链模式(Chain of Responsibility)
- JAVA设计模式十一:--Chain of Responsibility(职责链模式)
- 【Java设计模式】· 职责链模式(Chain of Responsibility)
- Chain of Responsibility(职责链设计模式)
- 设计模式-职责链模式(chain of Responsibility)
- 设计模式:行为模式:职责链(chain of responsibility)
- 设计模式之职责链模式(Chain Of Responsibility)
- Java模式 - Chain of Responsibility(职责链模式)
- 设计模式--职责链(Chain of Responsibility)
- 职责链模式(Chain of Responsibility)
- Chain of Responsibility(职责链模式)
- 职责链(Chain of Responsibility)模式
- 职责链模式(Chain Of Responsibility)
- 职责链模式(Chain of Responsibility)
- 《淘宝技术这十年》读书笔记
- Memcached的配置,SSH项目中的整合(com.whalin),Memcached工具类,Memcached的代码调用
- 【ubuntu】【chrome_r197497】编译
- iOS The identity used to sign the executable is no longer valid
- Android studio进行NDK开发
- 【Java设计模式】· 职责链模式(Chain of Responsibility)
- iOS开发之-自定义设置字体
- Linux<->Windows远程连接(局域网内连接和外网与局域网连接)
- VC++的链接错误LNK2005
- C语言的算术运算符
- AngularJS下的后台传值问题
- iOS iOS9 beta 请求出现App Transport Security has blocked a cleartext HTTP (http://)
- linux网络编程 no route to host 解决方案
- MongoVUE怎样插入数据