責任鏈模式是 行爲模式
的一種。
在責任鏈模式裏,很多對象由每一個對象對其下家的引用而連接起來形成一條鏈。
請求在這個鏈上傳遞,直到鏈上的某一個對象決定處理此請求。
發出這個請求的客戶端並不知道鏈上的哪一個對象最終處理這個請求,這使得系統可以在不影響客戶端的情況下動態地重新組織和分配責任。
個人理解
發出一條請求,接收者能處理則處理,不能處理則傳遞給下一個處理。
舉個例子
對彈幕的信息進行過濾
結構圖:
- 通用接口
/**
* 通用過濾接口
*/
public interface Filter {
String doFilter(String msg);
}
- 具體過濾器
- HTML標籤過濾器
/**
* Html 字符過濾器
*/
public class HTMLFilter implements Filter {
@Override
public String doFilter(String msg) {
return msg.replace("<", "").replace(">", "");
}
}
- 敏感詞過濾器
/**
* 敏感字過濾器
*/
public class SenstiveFilter implements Filter {
@Override
public String doFilter(String msg) {
return msg.replace("敏感","**");
}
}
- 過濾鏈
/**
* 過濾鏈
*/
public class FilterChain implements Filter {
private List<Filter> filters = new ArrayList<>();
/**
* 添加過濾器
* @param filter 被添加的過濾器
* @return 過濾鏈
*/
public FilterChain addFilter(Filter filter){
filters.add(filter);
return this;
}
@Override
public String doFilter(String msg) {
for (Filter filter : filters) {
msg = filter.doFilter(msg);
}
return msg;
}
}
- 測試類
public class Main {
public static void main(String[] args) {
String msg = "6666, 真厲害,敏感信息,<html>";
FilterChain filterChain = new FilterChain();
filterChain.addFilter(new HTMLFilter()).addFilter(new SenstiveFilter());
String s = filterChain.doFilter(msg);
System.out.println(s);
//6666, 真厲害,**信息,html
}
}