輕松控制java義務鏈形式。本站提示廣大學習愛好者:(輕松控制java義務鏈形式)文章只能為提供參考,不一定能成為您想要的結果。以下是輕松控制java義務鏈形式正文
界說:義務鏈形式(Chain of Responsibility Pattern)為要求創立了一個吸收者對象的鏈。這類形式賜與要求的類型,對要求的發送者和吸收者停止解耦。這類類型的設計形式屬於行動型形式。在這類形式中,平日每一個吸收者都包括對另外一個吸收者的援用。假如一個對象不克不及處置該要求,那末它會把雷同的要求傳給下一個吸收者,依此類推。
特色:1、下降耦合度。它將要求的發送者和吸收者解耦。
2、簡化了對象。使得對象不須要曉得鏈的構造。
3、加強給對象指派職責的靈巧性。經由過程轉變鏈內的成員或許調動它們的順序,許可靜態地新增或許刪除義務。
4、增長新的要求處置類很便利。
企業級開辟和經常使用框架中的運用:spring,struts的攔阻器,servlet的過濾器
詳細實例:
/** *這裡以公司告假舉例: *1、或人告假(事宜) *2、項目組長審批:小於三天可以審批,年夜於三天請示下級 *3、部分主管審批:小於十天可以審批,年夜於十天請示下級 *4、總司理審批 :小於30天可以審批,年夜於30天不同意 */ public class Demo { public static void main(String[] args) { Event event = new Event("法式員", 32, "回老家投親"); Leader a = new GroupLeader("張三"); Leader b = new Manager("李四"); Leader c = new GeneralManager("王五"); //指定義務鏈形式 a.setNextLeader(b); b.setNextLeader(c); a.handler(event); } } /** * 事宜對象,義務鏈中的詳細處置事宜 * 該實例中即為告假這件事兒 */ class Event{ private String name; private int days; private String reason; public Event(String name, int days, String reason) { super(); this.name = name; this.days = days; this.reason = reason; } 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; } public String getReason() { return reason; } public void setReason(String reason) { this.reason = reason; } } /** * 籠統義務鏈對象,前面的一切現實義務鏈對象繼續自該對象 */ abstract class Leader{ private String name; protected Leader nextLeader;//義務鏈中的下一個義務對象,這是讓義務鏈連續下去的基本 public Leader(String name) { super(); this.name = name; } public void setNextLeader(Leader nextLeader) { this.nextLeader = nextLeader; } public String getName() { return name; } public void setName(String name) { this.name = name; } protected abstract void handler(Event event); } /** * 告假流程中的第一個對象,組長 */ class GroupLeader extends Leader{ public GroupLeader(String name) { super(name); } protected void handler(Event event) { if(event.getDays() < 3){ System.out.println("--------------------告假條--------------------"); System.out.print("| 告假人:"+event.getName()+" | "); System.out.println("告假天數:"+event.getDays()+"天"+" |"); System.out.println("| 告假緣由:"+event.getReason() + " |"); System.out.println("審批人:"+this.getName()+"(組長),經由過程!"); System.out.println(); }else{ System.out.println(this.getName()+"(主管),沒有權限!"); this.nextLeader.handler(event); } } } /** * 告假流程中的第二個對象,部分主管 */ class Manager extends Leader{ public Manager(String name) { super(name); } protected void handler(Event event) { if(event.getDays() < 10){ System.out.println("--------------------告假條--------------------"); System.out.print("| 告假人:"+event.getName()+" | "); System.out.println("告假天數:"+event.getDays()+"天"+" |"); System.out.println("| 告假緣由:"+event.getReason() + " |"); System.out.println("審批人:"+this.getName()+"(主管),告假經由過程!"); System.out.println(); }else{ System.out.println(this.getName()+"(總司理),沒有權限!"); this.nextLeader.handler(event); } } } /** * 告假流程中的第三個對象,總司理 */ class GeneralManager extends Leader{ public GeneralManager(String name) { super(name); } protected void handler(Event event) { if(event.getDays() < 30){ System.out.println("--------------------告假條--------------------"); System.out.print("| 告假人:"+event.getName()+" | "); System.out.println("告假天數:"+event.getDays()+"天"+" |"); System.out.println("| 告假緣由:"+event.getReason() + " |"); System.out.println("審批人:"+this.getName()+"(總司理)"); System.out.println(); }else{ System.out.println("--------------------告假條--------------------"); System.out.print("| 告假人:"+event.getName()+" | "); System.out.println("告假天數:"+event.getDays()+"天"+" |"); System.out.println("| 告假緣由:"+event.getReason() + " |"); System.out.println("審批人:"+this.getName()+"(總司理),告假人欠亨過!"); System.out.println(); } } }
義務鏈形式重要用於流程掌握這一類的開辟,比擬較於純真用if-else形式,在代碼修正和整合上有更高的效力,更利於代碼保護。並且,須要增長義務鏈中的對象時,須要在再完成一個詳細的義務鏈類,然後創立義務對象,並保護義務鏈關系就行,不須要更年夜的開支,並且在現實設計中,我們許多時刻義務鏈的保護都在設置裝備擺設文件中停止,如許我們將節儉更多的開辟時光。
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。