欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Java設計模式---ChainOfResponsibility責任鏈模式

參考于 :

  大話(huà)設計模式

  馬士兵設計模式視頻

  代碼參考于馬士兵設計模式視頻

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

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

  

 

1.場(chǎng)景

  在網(wǎng)上評論一句話(huà),往往會(huì )經(jīng)過(guò)一系列的處理,有沒(méi)有敏感詞之類(lèi),現在我們來(lái)模擬一下。

  把<html>,o.o,和諧

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

2.不使用職責鏈模式

  

package com.dingyu.ChainOfResponsibility;/** * 重點(diǎn)在于模式,故邏輯暫時(shí)不考慮 *  * @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);    }}

  缺點(diǎn):過(guò)濾無(wú)法復用,無(wú)法記錄過(guò)濾順序。

3.使用職責鏈模式

  

package com.dingyu.ChainOfResponsibility;/** * 過(guò)濾器,doFilter處理msg字符串 * @author dingyu * */public interface Filter {    public String doFilter(String msg);}
package com.dingyu.ChainOfResponsibility;/** * 處理html符號 * 測試用的,邏輯不是很?chē)乐?* @author dingyu * */public class HTMLFilter implements Filter {    @Override    public String doFilter(String msg) {        return msg.replace("<", "[").replace(">", "]");    }}
package com.dingyu.ChainOfResponsibility;/** * 過(guò)濾敏感詞匯 * @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);    }}

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

4.改進(jìn)職責鏈模式

  

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. 職責鏈實(shí)現雙向過(guò)濾  

  思路類(lèi)似于遞歸,建議使用debug一步步調試。

package com.dingyu.ChainOfResponsibility;/** * 過(guò)濾器,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符號 測試用的,邏輯不是很?chē)乐?*  * @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;/** * 過(guò)濾敏感詞匯 *  * @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ù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
由淺入深講解責任鏈模式,理解Tomcat的Filter過(guò)濾器
Filter技術(shù)的應用(轉)
一個(gè)servlet登陸過(guò)濾器
Servlet過(guò)濾器
責任鏈或過(guò)濾器模式3-模擬tomcat的過(guò)濾器-馬士兵設計模式教程 .
Filter 過(guò)濾器
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久