1. 程式人生 > 實用技巧 >14、Cahin of Responsibility 責任鏈 COR設計模式

14、Cahin of Responsibility 責任鏈 COR設計模式

1

chain of responsibility

Java EEFilter 使

2

12使3調4便

12調便調3

使 123

3

XX996

Msg

classMsg{
Stringname;
Stringmsg;

publicStringgetMsg(){
returnmsg;
}

publicvoidsetMsg(Stringmsg){
this.msg=msg;
}

@Override
publicStringtoString(){
return"Msg{"+
"msg='"+msg+'\''+
'}';
}
}

ChainData

classChainData{
booleanflag=true;
List<String>messages=newArrayList<>();

@Override
publicStringtoString(){
return"ChainData{"+
"messages="+messages+
'}';
}
}

Filter

interfaceFilter{
ChainDatadoFilter(Msgmsg,ChainDatachainData);
}

HtmlFilterSensitiveFilterFaceFilterUrlFilter


classHtmlFilterimplementsFilter{
@Override
publicChainDatadoFilter(Msgmsg,ChainDatachainData){
Stringr=msg.getMsg();
r=r.replace("<","[");
r=r.replace(">","]");
msg.setMsg(r);
chainData.messages.add("html");
returnchainData;
}
}

/**
*
*/
classSensitiveFilterimplementsFilter{
@Override
publicChainDatadoFilter(Msgmsg,ChainDatachainData){
Stringr=msg.getMsg();
r=r.replaceAll("996","995");
msg.setMsg(r);
chainData.flag=false;
chainData.messages.add("");
returnchainData;
}
}

classFaceFilterimplementsFilter{
@Override
publicChainDatadoFilter(Msgmsg,ChainDatachainData){
Stringr=msg.getMsg();
r=r.replace(":)","^v^");
msg.setMsg(r);
chainData.messages.add(":)");
returnchainData;
}
}

classUrlFilterimplementsFilter{
@Override
publicChainDatadoFilter(Msgmsg,ChainDatachainData){
Stringr=msg.getMsg();
r=r.replace("xxx.com","http://xxx.com");
msg.setMsg(r);
chainData.messages.add("url");
returnchainData;
}
}

FilterChain

classFilterChainimplementsFilter{
List<Filter>filters=newArrayList<>();

publicFilterChainadd(Filterfilter){
filters.add(filter);
returnthis;
}

publicvoidremove(Filterfilter){
filters.remove(filter);
}

@Override
publicChainDatadoFilter(Msgmsg,ChainDatachainData){
for(Filterfilter:filters){
filter.doFilter(msg,chainData);
if(!chainData.flag){
returnchainData;
}
}
returnchainData;
}
}

ChainMain

/**
*@authorlin
*@version1.0
*@date2020-07-2815:40
*@DescriptionTODO
*/
publicclassChainMain{
publicstaticvoidmain(String[]args){
ChainDatachainData=newChainData();

Msgmsg=newMsg();
msg.setMsg(":),<script>xxx.com.996</script>");

//
//msg
//Stringr=msg.getMsg();
//r=r.replace("<","[");
//r=r.replace(">","]");
//msg.setMsg(r);
//
//r=r.replaceAll("996","995");
//msg.setMsg(r);

//使
FilterChainchain1=newFilterChain();
chain1.add(newHtmlFilter()).add(newSensitiveFilter());
FilterChainchain2=newFilterChain();
chain2.add(newFaceFilter()).add(newUrlFilter());

chain1.add(chain2);
chain1.doFilter(msg,chainData);
System.out.println(chainData);
System.out.println(msg);
}
}

4

調 Springservlet

沿

公眾號發哥講

這是一個稍偏基礎和偏技術的公眾號,甚至其中包括一些可能閱讀量很低的包含程式碼的技術文,不知道你是不是喜歡,期待你的關注。

如果你覺得文章還不錯,就請點選右上角選擇傳送給朋友或者轉發到朋友圈~

● 掃碼關注我們

據說看到好文章不推薦的人,伺服器容易宕機!

本文版權歸發哥講部落格園共有,原創文章,未經允許不得轉載,否則保留追究法律責任的權利。