责任链设计模式

 1 public class Main {
 2     public static void main(String[] args) {
 3         Msg msg = new Msg();
 4         msg.setMsg("要处理的数据<xxxJava技术决定一切>,996");
 5         FilterChain filterChain = new FilterChain();
 6         filterChain.add(new HtmlFilter()).add(new SensitiveFilter());
 7         FilterChain filterChain2 = new FilterChain();
 8         filterChain2.add(new MyLoveFilter());
 9         filterChain.add(filterChain2);
10         filterChain.doFilter(msg);
11         //将来还要加各种过滤动作...所有代码都写一起,特别乱
12         //过滤器就不错,哪部分变化就封装哪部分,封装变化
13 
14         System.out.println(msg);
15     }
16     public static class MyFilter implements Filter{
17 
18         @Override
19         public boolean doFilter(Msg msg) {
20             msg.setMsg(msg.getMsg().replace("Java","PHP"));
21             return true;
22         }
23     }
24     public static class FilterChain implements Filter{
25         List<Filter> list = new ArrayList<>();
26         public FilterChain add(Filter filter){
27             list.add(filter);
28             return this;
29         }
30         public boolean doFilter(Msg msg){
31             for (Filter filter : list) {
32                 if(!filter.doFilter(msg)){
33                     return false;
34                 }
35             }
36             return true;
37         }
38     }
39     public interface Filter{
40         public boolean doFilter(Msg msg);
41     }
42     public static class HtmlFilter implements Filter{
43 
44 
45         @Override
46         public boolean doFilter(Msg msg) {
47             msg.setMsg(msg.getMsg().replace("<","["));
48             msg.setMsg(msg.getMsg().replace(">","]"));
49             return true;
50         }
51     }
52     public static class SensitiveFilter implements Filter{
53 
54 
55         @Override
56         public boolean doFilter(Msg msg) {
57             msg.setMsg(msg.getMsg().replace("996","955"));
58             return false;
59         }
60     }
61     public static class Msg{
62         public String msg;
63         public String name;
64         public String getMsg() {
65             return msg;
66         }
67 
68         public void setMsg(String msg) {
69             this.msg = msg;
70         }
71 
72         public String getName() {
73             return name;
74         }
75 
76         public void setName(String name) {
77             this.name = name;
78         }
79 
80         @Override
81         public String toString() {
82             return "Msg{" +
83                     "msg='" + msg + '\'' +
84                     ", name='" + name + '\'' +
85                     '}';
86         }
87     }
88 }
 
posted @ 2022-03-11 01:18  独醉乄  阅读(36)  评论(0)    收藏  举报