java設計模式--責任鏈(一)
阿新 • • 發佈:2018-12-12
責任鏈也可以叫做過濾器或者攔截器,只是不同的叫法而已,都是對當前的資料在使用前做相應的處理。
階段一:
從簡單的例子入手。問題描述:有一個字串,需要對這個字串做一些處理,然後輸出。這裡我定義了一個處理器MsgDealer,用來對字串進行相應的處理,相應的程式碼如下:
Main:作為資料的入口
package chanOfResponsibility; public class Main { public static void main(String[] args) { String msg = "java知識點好多,需要花好多時間精力去學。好像出去旅遊。"; MsgDealer msgDealer = new MsgDealer(); msg = msgDealer.dealMsg(msg); System.out.println(msg); } }
MsgDealer:字串的處理類
package chanOfResponsibility;
public class MsgDealer {
public String dealMsg(String msg){
msg = msg.replaceAll("。", ";");
return msg;
}
}
現在如果我想要對這個字串做進一步的處理,那麼我就要修改MsgDealer的dealMsg方法,在裡面再新加處理的程式碼就行了。比如我還想將所有的“多”替換成“*”,那麼MsgDealer就變成如下:
package chanOfResponsibility;
public class MsgDealer {
public String dealMsg(String msg){
msg = msg.replaceAll("。", ";");
msg = msg.replaceAll("多", "*");
return msg;
}
}
如果這樣的處理方式很複雜,而不是這麼簡單的一行程式碼,那麼我們應該想辦法將這段處理程式碼封裝起來。新建一個介面如下:
package chanOfResponsibility; public interface Filter { public String doFilter(String msg); }
實現類如下:
package chanOfResponsibility;
public class SymbolFilter implements Filter{
@Override
public String doFilter(String msg) {
msg = msg.replaceAll("。", ";");
return msg;
}
}
package chanOfResponsibility;
public class CharacterFilter implements Filter{
@Override
public String doFilter(String msg) {
msg = msg.replaceAll("多", "*");
return msg;
}
}
此時MsgDealer變成了:
package chanOfResponsibility;
public class MsgDealer {
public String dealMsg(String msg){
SymbolFilter symbolFilter = new SymbolFilter();
msg = symbolFilter.doFilter(msg);
CharacterFilter characterFilter = new CharacterFilter();
msg = characterFilter.doFilter(msg);
return msg;
}
}
此時MsgDealer的程式碼有些冗餘,SymbolFilter與CharacterFilter都實現了Filter藉口,它們兩個組合起來就相當於一個過濾器鏈。先寫一個簡單的鏈,用陣列將這兩個過濾器放在一起,程式碼如下:
package chanOfResponsibility;
public class MsgDealer {
public Filter[] f = new Filter[]{new SymbolFilter(),new CharacterFilter()};
public String dealMsg(String msg){
for(Filter filter : f){
msg = filter.doFilter(msg);
}
return msg;
}
}
這樣如果再新增一個filter,直接在f中再新增一個就行了,同時你還可以控制過濾器的先後次序。這其實就是個簡單的責任鏈。
未完待續。。。
以上是個人觀點,如有錯誤,歡迎指正。