java设计模式之责任
来源:互联网 发布:金蝶软件服务商 编辑:程序博客网 时间:2024/06/12 20:34
1,需求构建
例:工厂发生工伤事件,根据事件的类别比如1,2,3,4,5,6级别,根据工伤的级别,分别由组长,线长,主任,厂长,老板,政府来进行处理。低级者别处理不了就传递给高级别者来进行处理。直到处理者处理完了。
2,分析
很明显的,组长,线长,主任,厂长,老板,政府这些人可以归纳为处理者,抽象出来为两个功能: 1. 处理事件 2. 传递事件 责任设计模式的连个重要角色: 1,抽象的处理者 2,具体的处理者
3,代码实现
为了代码简洁,我这里创建到主任级别
// 工伤类class Wound{ private String name; private Integer level; // 工伤级别 public Wound(String name, Integer level) { this.name = name; this.level = level; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getLevel() { return level; } public void setLevel(Integer level) { this.level = level; }}// 工伤处理抽象类public interface WoundHandler { // 进行处理工伤,如果不能处理传递给下个处理者 void handlerWound(Wound wound);}// 可以处理级别1的工伤class 组长 implements WoundHandler{ private WoundHandler nextHandler; public WoundHandler getNextHandler() { if (nextHandler == null){ nextHandler = new 线长(); } return nextHandler; } public void setNextHandler(WoundHandler nextHandler) { this.nextHandler = nextHandler; } @Override public void handlerWound(Wound wound) { if (1 == wound.getLevel()){ System.out.println(getClass()+"处理了工伤"); }else { this.getNextHandler().handlerWound(wound); } }}// 可以处理级别2的工伤class 线长 implements WoundHandler{ private WoundHandler nextHandler; public WoundHandler getNextHandler() { if (nextHandler == null){ nextHandler = new 主任(); } return nextHandler; } public void setNextHandler(WoundHandler nextHandler) { this.nextHandler = nextHandler; } @Override public void handlerWound(Wound wound) { if (2 == wound.getLevel()){ System.out.println(getClass()+"处理了工伤"); }else { this.getNextHandler().handlerWound(wound); } }}// 可以处理级别3的工伤class 主任 implements WoundHandler{ private WoundHandler nextHandler; public WoundHandler getNextHandler() { if (nextHandler == null){ nextHandler = new 厂长(); } return nextHandler; } public void setNextHandler(WoundHandler nextHandler) { this.nextHandler = nextHandler; } @Override public void handlerWound(Wound wound) { if (3 == wound.getLevel()){ System.out.println(getClass()+"处理了工伤"); }else { this.getNextHandler().handlerWound(wound); } }}// 客户端调用功能public class Client { public static void main(String[] args) { Wound wound = new Wound("zhangsan",2); WoundHandler zuzhang = new 组长(); zuzhang.handlerWound(wound); }}
4,总结
责任设计模式又分为存责任模式的和不存的责任模式,存的指的是,具体的处理者,要不处理请求,完毕,要不就直接传递,但是在现实开发中这种纯粹的情景是不存在的。而且我们也并不关注他们的是否纯粹,只需要他们能处理好客户端的请求就行了。
5,特点
- 灵活,正如我们自己实现的tomcat中的过滤器一样,这种可以添加具体处理者非常灵活;
- 解耦,客户端完全不需要直到谁处理了我的请求,如果有返回,只需要关心相关的业务。
参考文献
大话设计模式
阅读全文
0 0
- java设计模式之责任
- java设计模式之责任链模式
- java设计模式之责任链模式
- Java 设计模式之责任链模式
- Java设计模式之责任链模式
- 《Java设计模式》之责任链模式
- 《Java设计模式 》之责任链模式
- JAVA设计模式之:责任链模式
- java设计模式之责任链模式
- java设计模式之责任链模式
- Java设计模式之责任链模式
- java设计模式之责任链模式
- 《java设计模式》之责任链模式
- java设计模式之责任链模式
- Java设计模式之责任链模式
- java设计模式之责任链模式
- Java设计模式之责任链模式
- JAVA设计模式之责任链模式
- 模板方法模式
- 如何从零设计结构清晰、操作友好的权限管理模块
- Spring 配置文件头部xmls解析
- android侧滑菜单
- [LeetCode] 26.Remove Duplicates from Sorted Array
- java设计模式之责任
- 学习记录5
- 最短路径详解
- 网络编程(二)
- mysql记录慢查询日志的方法
- 安卓LOG封装类
- Tomcat 架构分析(二) ClassLoader详解
- 如何准备HIPAA合规审核
- Android Studio gradle编译 NullPointerException(no error message)解决