设计模式:责任链模式(Chain of Responsibility)
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/chain-of-responsibility/
?使多個對象都有機會處理請求,從而避免請求的發送者和接受者之間的耦合關系。將這些對象連成一條鏈,并沿著這條鏈傳遞該請求,知道有一個對象處理它為止。
責任鏈模式的角色:
?舉個簡單例子:報銷流程,項目經理<部門經理<總經理
?其中項目經理報銷額度不能超過1000,部門經理報銷額度不能超過5000,超過5000的則需要總經理審核。
1 抽象處理角色ConsumeHandler
2 具體處理角色
public class ProjectHandler extends ConsumeHandler {@Overridepublic void doHandler(String user, BigDecimal free){if(free.doubleValue() < 1000){if(user.equals("jj"))System.out.println(user+"報銷不通過");elseSystem.out.println(user+"給予報銷:"+free);}else{if(getNextHandler() != null){getNextHandler().doHandler(user, free);}}} }public class DeptHandler extends ConsumeHandler {@Overridepublic void doHandler(String user, BigDecimal free){if(free.doubleValue() < 5000){if(user.equals("qq"))System.out.println(user+"報銷不通過");elseSystem.out.println(user+"給予報銷:"+free);}else{if(getNextHandler() != null){getNextHandler().doHandler(user, free);}}} }public class GeneralHandler extends ConsumeHandler {@Overridepublic void doHandler(String user, BigDecimal free){if(free.doubleValue() >= 5000){if(user.equals("zzh"))System.out.println(user+"報銷不通過");elseSystem.out.println(user+"給予報銷:"+free);}else{if(getNextHandler() != null){getNextHandler().doHandler(user, free);}}} }3 測試代碼
ConsumeHandler project = new ProjectHandler();ConsumeHandler dept = new DeptHandler();ConsumeHandler general = new GeneralHandler();project.setNextHandler(dept);dept.setNextHandler(general);project.doHandler("jj", new BigDecimal(2000));project.doHandler("jj", new BigDecimal(300));project.doHandler("qq", new BigDecimal(2000));project.doHandler("zzh", new BigDecimal(20000));project.doHandler("qq", new BigDecimal(20000));測試結果:
jj給予報銷:2000 jj報銷不通過 qq報銷不通過 zzh報銷不通過 qq給予報銷:20000?和這個例子相同的還有請假管理,比如請假2天內的部門經理可以處理,超過2天不超過5天的可以研發總監處理,超過5天的需要總經理處理。
?責任鏈模式可能是一條直線,一個環鏈甚至一個樹結構的一部分。
?責任鏈模式的缺點:當責任鏈的鏈結構比較長比較復雜的話,會產生很多內存垃圾對象,他們在實際處理中,并沒有發揮任何的作用。
JDK中的責任鏈模式
java.util.logging.Logger#log()
javax.servlet.Filter#doFilter()
參考資料
歡迎跳轉到本文的原文鏈接:https://honeypps.com/design_pattern/chain-of-responsibility/
歡迎支持筆者新作:《深入理解Kafka:核心設計與實踐原理》和《RabbitMQ實戰指南》,同時歡迎關注筆者的微信公眾號:朱小廝的博客。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的设计模式:责任链模式(Chain of Responsibility)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式:解释器模式(Interpret
- 下一篇: asp.net ajax控件工具集 Au