Filter过滤链条

Filter.java

package com.bjsxt.dp.filter;

public interface Filter {
    String doFilter(String str);
}

SesitiveFilter.java

package com.bjsxt.dp.filter;

public class SesitiveFilter implements Filter {

    @Override
    public String doFilter(String str) {
        // process the sensitive words
        String r = str.replace("被就业", "就业").replace("敏感", "");
        return r;
    }
}

FaceFilter.java

package com.bjsxt.dp.filter;

public class FaceFilter implements Filter {
    @Override
    public String doFilter(String str) {
        return str.replace(":)", "^V^");
    }
}

HTMLFilter.java

package com.bjsxt.dp.filter;

public class HTMLFilter implements Filter {

    @Override
    public String doFilter(String str) {
        //process the html tag <>
        String r = str.replace('<', '[')
                   .replace('>', ']');
        return r;
    }

}

FilterChain.java

package com.bjsxt.dp.filter;

import java.util.ArrayList;
import java.util.List;

public class FilterChain implements Filter {
    List<Filter> filters = new ArrayList<Filter>();
    
    public FilterChain addFilter(Filter f) {
        this.filters.add(f);
        return this;
    }
    
    public String doFilter(String str) {
        String r = str;
        for(Filter f: filters) {
            r = f.doFilter(r);
        }
        return r;
    }
}

MsgProcessor.java

package com.bjsxt.dp.filter;

public class MsgProcessor {
    private String msg;
    FilterChain fc;

    public FilterChain getFc() {
        return fc;
    }

    public void setFc(FilterChain fc) {
        this.fc = fc;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String process() {
        return fc.doFilter(msg);
    }
}

Main.java

package com.bjsxt.dp.filter;

public class Main {
    /**
     * @author admin
     */
    public static void main(String[] args) {
        String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
        MsgProcessor mp = new MsgProcessor();
        mp.setMsg(msg);
        FilterChain fc = new FilterChain();
        fc.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());
        FilterChain fc2 = new FilterChain();
        fc2.addFilter(new FaceFilter());

        fc.addFilter(fc2);
        mp.setFc(fc);
        String result = mp.process();
        System.out.println(result);
    }

}

各类之间的关系图:

原文地址:https://www.cnblogs.com/jianfengyun/p/3720334.html