責任鏈模式
設計模式很多時候都是看見名字都知道意思,責任鏈,見名知義為請求創建一系列處理對象。 此模式基於請求的類型將請求的發送方和接收方分離。通常每個接收器包含對另一個接收器的引用。如果一個對象不能處理請求,則它將相同的對象傳遞給下一個接收者,這樣形成一條鏈。這種模式屬於行為模式。基於這種情況,我寫了一個字符串判斷是否為null或者""的責任鏈,先去判斷null、判斷不出來在判斷"",這樣就形成一條鏈。簡單簡潔粗暴
責任鏈模式UML圖

責任鏈模式代碼
package com.roc.responsibility; /** * 判斷是否為空的抽象類 * @author liaowp * */ public abstract class IsEmptyAbstract { protected IsEmptyAbstract isEmptyAbstract; public void setIsEmptyAbstract(IsEmptyAbstract isEmptyAbstract) { this.isEmptyAbstract = isEmptyAbstract; } public boolean inputMsg(String str){ if(isEmpty(str)){// return true; }else{//如果沒有判斷出來就傳入下一個 if(isEmptyAbstract !=null){ return isEmptyAbstract.isEmpty(str); }else{ System.out.println("判斷器沒有初始化"); return false; } } } /** * 判斷是否為空 * @return */ abstract protected boolean isEmpty(String str); }
package com.roc.responsibility; /** * 判斷是不是null * @author liaowp * */ public class isNull extends IsEmptyAbstract{ @Override protected boolean isEmpty(String str) { return null==str; } }
package com.roc.responsibility; /** * 判斷是不是"" * @author liaowp * */ public class IsEmpty extends IsEmptyAbstract{ @Override protected boolean isEmpty(String str) { return "".equals(str); } }
package com.roc.responsibility; /** * 責任鏈模式 * @author liaowp * */ public class Client { public static void main(String[] args) { String str = ""; isNull isNull = new isNull(); IsEmpty isEmpty = new IsEmpty(); isNull.setIsEmptyAbstract(isEmpty); System.out.println(isNull.inputMsg(str)); } }
責任鏈模式適用場景
1、有多個對象共同對一個任務進行處理。
2、這些對象使用鏈式存儲結構,形成一個鏈,每個對象知道自己的下一個對象。
3、一個對象對任務進行處理,可以添加一些操作后將對象傳遞個下一個任務。也可以在此對象上結束任務的處理,並結束任務。
