• 设计模式之——责任链模式


    1 责任链

    1 package com.alvin;
    2 
    3 public interface Filter {
    4     public String doFilter(String str);
    5 }
    1 package com.alvin;
    2 
    3 public class HtmlFilter implements Filter{
    4 
    5     public String doFilter(String str) {
    6         return str.replace('<', '[').replace('>', ']');
    7     }
    8 
    9 }
     1 package com.alvin;
     2 
     3 public class WordsFilter implements Filter{
     4 
     5     @Override
     6     public String doFilter(String str) {
     7         // TODO Auto-generated method stub
     8         return str.replace("铭感词", "河蟹");
     9     }
    10     
    11 }
     1 package com.alvin;
     2 
     3 public class MesProcessor {
     4     private String msg;
     5     Filter [] filters = {new HtmlFilter(), new WordsFilter()};
     6 
     7     public String getMsg() {
     8         return msg;
     9     }
    10 
    11     public void setMsg(String msg) {
    12         this.msg = msg;
    13     }
    14     
    15     public String process(){
    16         String r = msg;
    17         for (Filter f : filters) {
    18             r = f.doFilter(r);
    19         }
    20         return r;
    21     }
    22 }
     1 package com.alvin;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         String msg = "<script>,:),kdkjfejfid, 敏感词:)";
     6         MesProcessor mp = new MesProcessor();
     7         mp.setMsg(msg);
     8         String result = mp.process();
     9         System.out.println(result);
    10     }
    11 }

    测试结果为:[script],:),kdkjfejfid, 河蟹:)

    2 改进数组,采用ArrayList,增加FilterChain类

     1 package com.alvin;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 public class FilterChain {
     7     List<Filter> filters = new ArrayList<>();
     8 
     9     public void addFilter(Filter f) {
    10         filters.add(f);
    11     }
    12 
    13     public String doFilter(String str) {
    14         for (Filter filter : filters) {
    15             str = filter.doFilter(str);
    16         }
    17         return str;
    18     }
    19 }

    修改MesProcessor

     1 package com.alvin;
     2 
     3 public class MesProcessor {
     4     private String msg;
     5     FilterChain filterChain;
     6 
     7     public FilterChain getFilterChain() {
     8         return filterChain;
     9     }
    10 
    11     public void setFilterChain(FilterChain filterChain) {
    12         this.filterChain = filterChain;
    13     }
    14 
    15     public String getMsg() {
    16         return msg;
    17     }
    18 
    19     public void setMsg(String msg) {
    20         this.msg = msg;
    21     }
    22 
    23     public String process() {
    24         return filterChain.doFilter(msg);
    25     }
    26 }

    测试类

     1 package com.alvin;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         String msg = "<script>,:),kdkjfejfid, 敏感词:)";
     6         MesProcessor mp = new MesProcessor();
     7         mp.setMsg(msg);
     8         FilterChain filterChain = new FilterChain();
     9         filterChain.addFilter(new HtmlFilter());
    10         filterChain.addFilter(new WordsFilter());
    11         mp.setFilterChain(filterChain);
    12         String result = mp.process();
    13         System.out.println(result);
    14     }
    15 }

    测试结果:[script],:),kdkjfejfid, 河蟹:)

  • 相关阅读:
    netty
    python统计订单走势
    log4j日志写入数据库
    struts 在Action中访问web元素(request,session等)
    struts 简单前台用户名校验
    struts 页面调用Action的指定方法并传递参数
    简单的对象监听器 观察者设计模式
    servlet 简单filter避免中文乱码等
    Struts 第一个Hello页面
    JDBC 使用SimpleJdbcTemplate实现Dao
  • 原文地址:https://www.cnblogs.com/cityflickr/p/4007457.html
Copyright © 2020-2023  润新知