這篇文章主要為大家展示了“java設(shè)計模式中責(zé)任鏈模式的示例分析”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“java設(shè)計模式中責(zé)任鏈模式的示例分析”這篇文章吧。
創(chuàng)新互聯(lián)于2013年成立,先為杜爾伯特等服務(wù)建站,杜爾伯特等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為杜爾伯特企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
責(zé)任鏈模式里面的很多對象對其下家的引用而形成一條連鎖,請求在這個鏈條上傳遞,直到被處理完畢,而客戶端并不知道鏈條上哪個鏈接點(diǎn)處理了這個事件。開發(fā) Web 項(xiàng)目的時候,過濾器就是這樣工作的,過濾器互相嵌套,一個接著一個處理請求。這個好處就是在客戶端不在意的情況下動態(tài)處理連接點(diǎn)以及分配任務(wù)。
按照慣例,先上 UML 類圖
Handler :抽象處理角色,定義一個處理請求的接口,可以設(shè)定返回下家的引用;
ConcreteHandler:具體處理角色,接收到請求的具體處理者,可以選擇處理也可以不處理,把請求傳遞下一個連接點(diǎn)。
看下具體的代碼:
先把抽象處理者寫出來,他是一個抽象類或者接口,這里使用抽象類,每個處理者給一個名字 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(); }
再把具體的處理者實(shí)現(xiàn)出來
public class ConcreteHandler extends Handler{ public ConcreteHandler(String name) { super(name); } @Override public void handle() { System.out.println("當(dāng)前處理:"+getName()); if(getHandler()!=null){ getHandler().handle(); } } }
在該具體方法的 handle 里面,處理自個當(dāng)前需要做的事件,然后尋找后續(xù)處理者,把到最后完成。
看下客戶端如何處理
public class Client { public static void main(String[] args) { Handler h2=new ConcreteHandler("handler1"); Handler h3=new ConcreteHandler("handler2"); h2.setHandler(h3); h2.handle(); } }
在責(zé)任鏈模式當(dāng)中,對處理者而言,一旦一個請求只有一個處理者處理了,稱之為純的責(zé)任鏈模式,然并卵,現(xiàn)實(shí)沒有這么純的責(zé)任鏈;那么不純的就是一個請求被0個或多個處理者處理了,這個情況很常見。責(zé)任鏈?zhǔn)沟每蛻舳苏埱笈c接收端處理減低耦合度,使得多個處理者都可以處理這個請求。這個鏈可以是一棵樹,也可以是鏈表,也可以是個環(huán)。但是每個處理者只可以傳遞任務(wù)給下一個處理者,或者自己處理掉,不可能同時傳遞多個。
以上是“java設(shè)計模式中責(zé)任鏈模式的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!