KHL 009 11-计算机-基础-设计模式-java-尚学堂-01

责任链模式

案例 

一个BBS系统,对每个人发的评论等进行检查,如敏感信息等。

 

版本一 简单面向对象

 

主类:Main

 

 1 package com.laolang.dp.ChainFfResponsibility;
 2 
 3 import java.util.logging.Level;
 4 import java.util.logging.Logger;
 5 
 6 import com.laolang.dp.ChainFfResponsibility.filter.MsgProcessor;
 7 
 8 /**
 9  * 责任链模式 <br />
10  * 案例: <br />
11  * 一个BBS系统,对每个人发的评论等进行检查,如敏感信息等
12  * 
13  * @author laolang2016
14  * 
15  */
16 public class Main {
17 
18     public static Logger log = Logger.getLogger(Main.class.toString());
19 
20     static {
21         log.setLevel(Level.INFO);
22     }
23 
24     public static void main(String[] args) {
25         log.info("责任链模式");
26 
27         String msg = "敏感信息<script></script>大学生被就业了";
28         System.out.println("原信息:" + msg);
29 
30         MsgProcessor msgProcessor = new MsgProcessor();
31         msgProcessor.setMsg(msg);
32         String result = msgProcessor.processStr();
33         System.out.println(result);
34 
35     }
36 
37 }
View Code

 

 

 

字符串处理类:MsgProcessor

 

 1 package com.laolang.dp.ChainFfResponsibility.filter;
 2 
 3 /**
 4  * 字体串处理类
 5  * 
 6  * @author laolang2016
 7  * 
 8  */
 9 public class MsgProcessor {
10 
11     public MsgProcessor() {
12         super();
13     }
14 
15     /**
16      * 返回已处理的字符串
17      * 
18      * @return
19      */
20     // TODO
21     public String processStr() {
22         String result = msg;
23 
24         result = handleHtmlTag(msg);
25 
26         result = handleSensitiveWords(result);
27 
28         return result;
29     }
30 
31     /**
32      * 过滤HTML标记
33      * 
34      * @param str
35      * @return
36      */
37     private String handleHtmlTag(String str) {
38         return str.replaceAll("<", "[").replaceAll(">", "]");
39     }
40 
41     /**
42      * 处理敏感词
43      * 
44      * @param str
45      * @return
46      */
47     private String handleSensitiveWords(String str) {
48         return str.replaceAll("被就业", "***");
49     }
50 
51     public String getMsg() {
52         return msg;
53     }
54 
55     public void setMsg(String msg) {
56         this.msg = msg;
57     }
58 
59     /**
60      * 待处理字符串
61      */
62     private String msg;
63 
64 }
View Code

 

 

运行结果

 

 

版本二 过滤器

 

主类:Main

 

 1 package com.laolang.dp.ChainFfResponsibility;
 2 
 3 import java.util.logging.Level;
 4 import java.util.logging.Logger;
 5 
 6 import com.laolang.dp.ChainFfResponsibility.filter.MsgProcessor;
 7 
 8 /**
 9  * 责任链模式 <br />
10  * 案例: <br />
11  * 一个BBS系统,对每个人发的评论等进行检查,如敏感信息等
12  * 
13  * @author laolang2016
14  * 
15  */
16 public class Main {
17 
18     public static Logger log = Logger.getLogger(Main.class.toString());
19 
20     static {
21         log.setLevel(Level.INFO);
22     }
23 
24     public static void main(String[] args) {
25         log.info("责任链模式");
26 
27         String msg = "敏感信息<script></script>大学生被就业了";
28         System.out.println("原信息:" + msg);
29 
30         MsgProcessor msgProcessor = new MsgProcessor();
31         msgProcessor.setMsg(msg);
32         String result = msgProcessor.processStr();
33         System.out.println(result);
34 
35     }
36 
37 }
View Code

 

 

过滤器接口:WordFilter

 

1 package com.laolang.dp.ChainFfResponsibility.filter;
2 
3 public interface WordFilter {
4 
5     public String doFilter( String str );
6 }
View Code

 

 

HTML标记过滤实现:

 

 1 package com.laolang.dp.ChainFfResponsibility.filter;
 2 
 3 import java.util.logging.Level;
 4 import java.util.logging.Logger;
 5 
 6 
 7 
 8 /**
 9  * HTML 过滤器
10  * 
11  * @author laolang2016
12  *
13  */
14 public class HtmlTagFilter implements WordFilter {
15     
16     public static Logger log = Logger.getLogger(HtmlTagFilter.class.toString());
17 
18     static {
19         log.setLevel(Level.INFO);
20     }
21 
22     @Override
23     public String doFilter(String str) {
24         log.info("处理HTML标记");
25         return str.replaceAll("<", "[").replaceAll(">", "]");
26     }
27 
28 }
View Code

 

 

敏感词过滤实现:SensitiveWordsFilter

 

 1 package com.laolang.dp.ChainFfResponsibility.filter;
 2 
 3 import java.util.logging.Level;
 4 import java.util.logging.Logger;
 5 
 6 
 7 /**
 8  * 
 9  * 敏感词过滤器
10  * 
11  * @author laolang2016
12  *
13  */
14 public class SensitiveWordsFilter implements WordFilter {
15     
16     public static Logger log = Logger.getLogger(SensitiveWordsFilter.class.toString());
17 
18     static {
19         log.setLevel(Level.INFO);
20     }
21 
22     @Override
23     public String doFilter(String str) {
24         log.info("处理敏感词");
25         return str.replaceAll("被就业", "***");
26     }
27 
28 }
View Code

 

 

敏感信息处理类:MsgProcessor

 

 1 package com.laolang.dp.ChainFfResponsibility.filter;
 2 
 3 /**
 4  * 字体串处理类
 5  * 
 6  * @author laolang2016
 7  * 
 8  */
 9 public class MsgProcessor {
10 
11     public MsgProcessor() {
12         super();
13     }
14 
15     /**
16      * 返回已处理的字符串
17      * 
18      * @return
19      */
20     // TODO
21     public String processStr() {
22         String result = msg;
23 
24         
25         for( WordFilter filter : wordFilters ){
26             result = filter.doFilter(result);
27         }
28         
29         return result;
30     }
31 
32     public String getMsg() {
33         return msg;
34     }
35 
36     public void setMsg(String msg) {
37         this.msg = msg;
38     }
39 
40     /**
41      * 待处理字符串
42      */
43     private String msg;
44     
45     /**
46      * 敏感词过滤器数组
47      */
48     private WordFilter[]  wordFilters = { new HtmlTagFilter() , new SensitiveWordsFilter() };
49 
50 }
View Code

 

版本三 加入过滤器链

 

过滤器链:FilterChan

 

 1 package com.laolang.dp.ChainFfResponsibility.filter;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 /**
 7  * Created by Administrator on 2017/10/21.
 8  */
 9 public class FilterChain implements WordFilter {
10 
11     public FilterChain() {
12         wordFilters = new ArrayList<WordFilter>();
13     }
14 
15     /**
16      * 添加过滤器
17      * @param wordFilter
18      */
19     public FilterChain addFilter( WordFilter wordFilter ){
20         wordFilters.add(wordFilter);
21         return this;
22     }
23 
24     @Override
25     public String doFilter(String str) {
26         String result = str;
27         for( WordFilter filter : wordFilters ){
28             result = filter.doFilter(result);
29         }
30         return result;
31     }
32 
33     private List<WordFilter> wordFilters;
34 }
View Code

 

 

敏感信息处理类:MsgProcessor

 

 1 package com.laolang.dp.ChainFfResponsibility.filter;
 2 
 3 /**
 4  * 字体串处理类
 5  *
 6  * @author laolang2016
 7  *
 8  */
 9 public class MsgProcessor {
10 
11     public MsgProcessor() {
12         super();
13     }
14 
15     /**
16      * 返回已处理的字符串
17      *
18      * @return
19      */
20     public String processStr() {
21         return filterChain.doFilter(msg);
22     }
23 
24     public String getMsg() {
25         return msg;
26     }
27 
28     public void setMsg(String msg) {
29         this.msg = msg;
30     }
31 
32     /**
33      * 待处理字符串
34      */
35     private String msg;
36 
37     public FilterChain getFilterChain() {
38         return filterChain;
39     }
40 
41     public void setFilterChain(FilterChain filterChain) {
42         this.filterChain = filterChain;
43     }
44 
45     /**
46      * 敏感词过滤器数组
47      */
48 //    private WordFilter[]  wordFilters = { new HtmlTagFilter() , new SensitiveWordsFilter() };
49 
50     // 过滤器链
51     private FilterChain filterChain;
52 
53 }
View Code

 

 

 

主类:Main

 

 1 package com.laolang.dp.ChainFfResponsibility;
 2 
 3 import com.laolang.dp.ChainFfResponsibility.filter.FilterChain;
 4 import com.laolang.dp.ChainFfResponsibility.filter.HtmlTagFilter;
 5 import com.laolang.dp.ChainFfResponsibility.filter.MsgProcessor;
 6 import com.laolang.dp.ChainFfResponsibility.filter.SensitiveWordsFilter;
 7 import org.slf4j.Logger;
 8 import org.slf4j.LoggerFactory;
 9 
10 /**
11  * Created by Administrator on 2017/10/21.
12  */
13 public class Main {
14 
15     private static final Logger log = LoggerFactory.getLogger(Main.class);
16 
17     public static void main(String[] args) {
18         log.info("责任链模式");
19 
20         String msg = "敏感信息<script></script>大学生被就业了";
21         System.out.println("原信息:" + msg);
22 
23         MsgProcessor msgProcessor = new MsgProcessor();
24         msgProcessor.setMsg(msg);
25 
26         // 添加过滤器链
27         FilterChain filterChain = new FilterChain();
28         filterChain.addFilter( new HtmlTagFilter()).addFilter( new SensitiveWordsFilter());
29 
30         // 添加其它过滤器链
31 //        FilterChain filterChain2 = new FilterChain();
32 //        filterChain.addFilter( new HtmlTagFilter()).addFilter( new SensitiveWordsFilter());
33 
34         msgProcessor.setFilterChain(filterChain);
35         String result = msgProcessor.processStr();
36         System.out.println(result);
37     }
38 }
View Code

 

转载于:https://www.cnblogs.com/khlbat/p/7694903.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值