菜鸟硕枫设计模式系列之14 职责链模式
发布日期:2021-10-01 08:45:11
浏览次数:3
分类:技术文章
本文共 3609 字,大约阅读时间需要 12 分钟。
职责链模式是保证一个事件一定能够被处理的一种模式。比如:一个coder去请假,temLeader批5天一下的,Manager批10天的,就这么简单。职责链模式是一种行为模式。 职责链模式类图: [img]http://dl.iteye.com/upload/attachment/364668/53040d7b-7b4a-3089-8bd4-83a72de64730.jpg[/img] 说明: Coder发出Something请求,经过TeamLeader->Manager构成的链,如果TeamLeader能处理,就返回结果,不能则有Manager处理。变化之处在于,当TeamLeader不在时(也可以是因为某种原因这里down掉了),则由链中其他环节去处理了,这样就保证了请求一定能被处理,增强了系统的健壮性。 具体代码:package chainOfResponsibilityPattern; public class Something { private String name; private int days; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getDays() { return days; } public void setDays(int days) { this.days = days; } }抽象人
package chainOfResponsibilityPattern; public abstract class Person { private Something something; private boolean isHere;//上班标志位 public abstract void request(Something something,Person toperson); public abstract void response(Person person); public Something getSomething() { return something; } public void setSomething(Something something) { this.something = something; } public boolean isHere() { return isHere; } public void setHere(boolean isHere) { this.isHere = isHere; } }manager:
package chainOfResponsibilityPattern; public class Manager extends Person{ @Override public void request(Something something, Person toperson) { // TODO Auto-generated method stub } @Override public void response(Person person) { if(person.getSomething().getDays()<10&&this.isHere()){ System.out.println("Manager deal with it"); System.out.println("Agree"); }else{ System.out.println("Disagree"); } } }码农:
package chainOfResponsibilityPattern; public class Coder extends Person{ private Something something; private Person leader; public Person getLeader() { return leader; } public void setLeader(Person leader) { this.leader = leader; } public Something getSomething() { return something; } public void setSomething(Something something) { this.something = something; } @Override public void response(Person person) { // TODO Auto-generated method stub } @Override public void request(Something something,Person toPerson) { System.out.println("For "+something.getName()+" ask for a " + "leave of about "+something.getDays()+" days"); leader.response(Coder.this); } }TeamLeader
package chainOfResponsibilityPattern; public class TeamLeader extends Person{ private Person leader; private boolean isHere; public Person getLeader() { return leader; } public void setLeader(Person leader) { this.leader = leader; } @Override public void response( Person person) { if(person.getSomething().getDays()<5 && this.isHere){ System.out.println("Agree"); }else{ System.out.println("TeamLeader can not deal,send it to Manager"); leader.response(person); } } @Override public void request(Something something, Person toperson) { } }测试类:
package chainOfResponsibilityPattern; public class ChainOfResponsibilityTest { public static void main(String[] args){ Something something = new Something(); something.setDays(4); something.setName("nothing"); Coder coder = new Coder(); coder.setSomething(something); TeamLeader teamLeader = new TeamLeader(); Person manager = new Manager(); manager.setHere(true); teamLeader.setHere(true); teamLeader.setLeader(manager); coder.setLeader(teamLeader); coder.request(something, teamLeader); teamLeader.setHere(false); manager.setHere(true); coder.setSomething(something); coder.request(something, teamLeader); } }
转载地址:https://blog.csdn.net/iteye_2655/article/details/81970477 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年03月28日 18时44分23秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
024_spacemacs支持org-pomodoro的声音提示
2019-04-27
025_everything搜索使用体验
2019-04-27
026_好用的windows小工具clover
2019-04-27
027-Mac触摸板实现窗口移动
2019-04-27
028_AUTOSAR RTE学习笔记-1
2019-04-27
029_AUTOSAR VFB学习笔记-2
2019-04-27
030_AUTOSAR软件组件学习笔记
2019-04-27
031_AUTOSAR学习笔记_BSW
2019-04-27
032_AUTOSAR学习笔记_接口
2019-04-27
033_PowerShell学习初探
2019-04-27
034_PowerShell中的HOME环境变量
2019-04-27
035_PowerShell中的dir与CMD中的dir差异
2019-04-27
036_AUTOSAR学习笔记_MCAL基础架构
2019-04-27
038_AUTOSAR学习笔记_McuGeneralConfiguration
2019-04-27
037_AUTOSAR学习笔记_MCU驱动
2019-04-27
039_AUTOSAR学习笔记_EB的编译环境修改
2019-04-27
模拟登陆C#实现
2019-04-27
【Task05】LeetCode腾讯精选打卡
2019-04-27
掌握JS压缩图片,这一篇就够了
2019-04-27
2020大厂web前端面试都喜欢问这些
2019-04-27