您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“java設計模式中責任鏈模式的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“java設計模式中責任鏈模式的示例分析”這篇文章吧。
責任鏈模式里面的很多對象對其下家的引用而形成一條連鎖,請求在這個鏈條上傳遞,直到被處理完畢,而客戶端并不知道鏈條上哪個鏈接點處理了這個事件。開發 Web 項目的時候,過濾器就是這樣工作的,過濾器互相嵌套,一個接著一個處理請求。這個好處就是在客戶端不在意的情況下動態處理連接點以及分配任務。
按照慣例,先上 UML 類圖
Handler :抽象處理角色,定義一個處理請求的接口,可以設定返回下家的引用;
ConcreteHandler:具體處理角色,接收到請求的具體處理者,可以選擇處理也可以不處理,把請求傳遞下一個連接點。
看下具體的代碼:
先把抽象處理者寫出來,他是一個抽象類或者接口,這里使用抽象類,每個處理者給一個名字 name 屬性
public abstract class Handler { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Handler(String name) { this.name=name; } protected Handler handler; public Handler getHandler() { return handler; } public void setHandler(Handler handler) { this.handler = handler; } public abstract void handle(); }
再把具體的處理者實現出來
public class ConcreteHandler extends Handler{ public ConcreteHandler(String name) { super(name); } @Override public void handle() { System.out.println("當前處理:"+getName()); if(getHandler()!=null){ getHandler().handle(); } } }
在該具體方法的 handle 里面,處理自個當前需要做的事件,然后尋找后續處理者,把到最后完成。
看下客戶端如何處理
public class Client { public static void main(String[] args) { Handler h2=new ConcreteHandler("handler1"); Handler h3=new ConcreteHandler("handler2"); h2.setHandler(h3); h2.handle(); } }
在責任鏈模式當中,對處理者而言,一旦一個請求只有一個處理者處理了,稱之為純的責任鏈模式,然并卵,現實沒有這么純的責任鏈;那么不純的就是一個請求被0個或多個處理者處理了,這個情況很常見。責任鏈使得客戶端請求與接收端處理減低耦合度,使得多個處理者都可以處理這個請求。這個鏈可以是一棵樹,也可以是鏈表,也可以是個環。但是每個處理者只可以傳遞任務給下一個處理者,或者自己處理掉,不可能同時傳遞多個。
以上是“java設計模式中責任鏈模式的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。