免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java設(shè)計模式---ChainOfResponsibility責(zé)任鏈模式

參考于 :

  大話設(shè)計模式

  馬士兵設(shè)計模式視頻

  代碼參考于馬士兵設(shè)計模式視頻

  寫在開頭:職責(zé)鏈模式:使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系

  圖來自大話設(shè)計模式,下面我的代碼中,Clien是t依賴于Handler1和Handler2的,不過可以使用配置文件或者直接給Filter集合初始化來解決這種依賴。

  

 

1.場景

  在網(wǎng)上評論一句話,往往會經(jīng)過一系列的處理,有沒有敏感詞之類,現(xiàn)在我們來模擬一下。

  把<html>,o.o,和諧

  換成 [html],^v^,/*河蟹*/

2.不使用職責(zé)鏈模式

  

package com.dingyu.ChainOfResponsibility;/** * 重點在于模式,故邏輯暫時不考慮 *  * @author dingyu * */public class Client01 {    public static void main(String[] args) {        String s = "<html>,o.o,和諧";        s = s.replace("<", "[").replace(">", "]").replace("和諧", "/*河蟹*/").replace("o.o", "^v^");        System.out.println(s);    }}

  缺點:過濾無法復(fù)用,無法記錄過濾順序。

3.使用職責(zé)鏈模式

  

package com.dingyu.ChainOfResponsibility;/** * 過濾器,doFilter處理msg字符串 * @author dingyu * */public interface Filter {    public String doFilter(String msg);}
package com.dingyu.ChainOfResponsibility;/** * 處理html符號 * 測試用的,邏輯不是很嚴謹 * @author dingyu * */public class HTMLFilter implements Filter {    @Override    public String doFilter(String msg) {        return msg.replace("<", "[").replace(">", "]");    }}
package com.dingyu.ChainOfResponsibility;/** * 過濾敏感詞匯 * @author dingyu * */public class SensitiveWordFilter implements Filter {    @Override    public String doFilter(String msg) {        return msg.replace("和諧", "/*河蟹*/");    }}
package com.dingyu.ChainOfResponsibility;/** * 處理符號 * @author dingyu * */public class SymbolFilter implements Filter {    @Override    public String doFilter(String msg) {        return msg.replace("o.o", "^v^");    }}
package com.dingyu.ChainOfResponsibility;import java.util.ArrayList;import java.util.List;public class Client {    private static List<Filter> filters = new ArrayList<Filter>();    private static int index = 0;    public static void main(String[] args) {        String s = "<html>,o.o,和諧";        filters.add(new HTMLFilter());        filters.add(new SymbolFilter());        filters.add(new SensitiveWordFilter());        for (Filter filter : filters) {            s = filter.doFilter(s);        }        System.out.println(s);    }}

  雖然使用職責(zé)鏈模式,但仍然有缺點,上面的順序是先HTML,然后Symbol,最后SensitiveWord,這三個構(gòu)成一個過濾鏈條,如果有一天我需要把另一個過濾鏈條插入到這根鏈條中間,實現(xiàn)起來很麻煩。

4.改進職責(zé)鏈模式

  

package com.dingyu.ChainOfResponsibility;import java.util.ArrayList;import java.util.List;/** *  * @author dingyu * */public class FilterChain implements Filter {    private List<Filter> filters = new ArrayList<Filter>();    public void add(Filter filter) {        filters.add(filter);    }    public List<Filter> getFilters() {        return filters;    }    @Override    public String doFilter(String msg) {        for (Filter filter : filters) {            msg = filter.doFilter(msg);        }        return msg;    }}
package com.dingyu.ChainOfResponsibility;import java.util.ArrayList;import java.util.List;public class Client {//    private static List<Filter> filters = new ArrayList<Filter>();    public static void main(String[] args) {        String s = "<html>,o.o,和諧";        // 鏈條1        FilterChain chain1 = new FilterChain();        chain1.add(new HTMLFilter());        // 鏈條2        FilterChain chain2 = new FilterChain();        chain2.add(new HTMLFilter());        chain2.add(new SensitiveWordFilter());        // 鏈條2插到鏈條1后        chain1.add(chain2);        chain1.add(new SymbolFilter());        s = chain1.doFilter(s);        System.out.println(s);        // filters.add(new HTMLFilter());        // filters.add(new SymbolFilter());        // filters.add(new SensitiveWordFilter());        // for (Filter filter : filters) {        // s = filter.doFilter(s);        // }        // System.out.println(s);    }}

  建議debug , eclipse快捷鍵

5. 職責(zé)鏈實現(xiàn)雙向過濾  

  思路類似于遞歸,建議使用debug一步步調(diào)試。

package com.dingyu.ChainOfResponsibility;/** * 過濾器,doFilter處理msg字符串 *  * @author dingyu * */public interface Filter {    // public String doFilter(String msg);    public void doFilter(Request request, Reponse reponse, FilterChain filterChain);}
package com.dingyu.ChainOfResponsibility;/** * 處理html符號 測試用的,邏輯不是很嚴謹 *  * @author dingyu * */public class HTMLFilter implements Filter {    @Override    public void doFilter(Request request, Reponse reponse, FilterChain filterChain) {        request.getRequestMsg().replace("<", "[").replace(">", "]");        filterChain.doFilter(request, reponse, filterChain);        reponse.setReponseMsg(reponse.getReponseMsg() + "-----HTMLFilter");    }    // @Override    // public String doFilter(String msg) {    // return msg.replace("<", "[").replace(">", "]");    // }}
package com.dingyu.ChainOfResponsibility;/** * 過濾敏感詞匯 *  * @author dingyu * */public class SensitiveWordFilter implements Filter {    @Override    public void doFilter(Request request, Reponse reponse, FilterChain filterChain) {        request.getRequestMsg().replace("和諧", "/*河蟹*/");        filterChain.doFilter(request, reponse, filterChain);        reponse.setReponseMsg(reponse.getReponseMsg() + "-----SensitiveWordFilter");    }    // @Override    // public String doFilter(String msg) {    // return msg.replace("和諧", "/*河蟹*/");    // }}
package com.dingyu.ChainOfResponsibility;/** * 處理符號 *  * @author dingyu * */public class SymbolFilter implements Filter {    @Override    public void doFilter(Request request, Reponse reponse, FilterChain filterChain) {        request.getRequestMsg().replace("o.o", "^v^");        filterChain.doFilter(request, reponse, filterChain);        reponse.setReponseMsg(reponse.getReponseMsg() + "-----SymbolFilter");    }    // @Override    // public String doFilter(String msg) {    // return msg.replace("o.o", "^v^");    // }}
package com.dingyu.ChainOfResponsibility;import java.util.ArrayList;import java.util.List;/** *  * @author dingyu * */public class FilterChain implements Filter {    private List<Filter> filters = new ArrayList<Filter>();    private int index=-1;    public void add(Filter filter) {        filters.add(filter);    }    public List<Filter> getFilters() {        return filters;    }    // @Override    // public String doFilter(String msg) {    // for (Filter filter : filters) {    // msg = filter.doFilter(msg);    // }    // return msg;    // }    @Override    public void doFilter(Request request, Reponse reponse, FilterChain filterChain) {        if (index == filters.size()-1)            return;        index++;        filters.get(index).doFilter(request, reponse, filterChain);            }}
package com.dingyu.ChainOfResponsibility;public class Client03 {    public static void main(String[] args) {        Request request = new Request();        Reponse reponse = new Reponse();        request.setRequestMsg("<html>,o.o,和諧");        reponse.setReponseMsg("hahahahaha");        FilterChain chain = new FilterChain();        chain.add(new HTMLFilter());        chain.add(new SensitiveWordFilter());        chain.add(new SymbolFilter());        chain.doFilter(request, reponse, chain);        System.out.println(request.getRequestMsg());        System.out.println(reponse.getReponseMsg());    }}

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
由淺入深講解責(zé)任鏈模式,理解Tomcat的Filter過濾器
Filter技術(shù)的應(yīng)用(轉(zhuǎn))
一個servlet登陸過濾器
Servlet過濾器
責(zé)任鏈或過濾器模式3-模擬tomcat的過濾器-馬士兵設(shè)計模式教程 .
Filter 過濾器
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服