1
+ /*
2
+ 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。
3
+
4
+ 过滤器(Filter) - 过滤器在请求处理程序执行请求之前或之后,执行某些任务。
5
+ 过滤器链(Filter Chain) - 过滤器链带有多个过滤器,并在 Target 上按照定义的顺序执行这些过滤器。
6
+ Target - Target 对象是请求处理程序。
7
+ 过滤管理器(Filter Manager) - 过滤管理器管理过滤器和过滤器链。
8
+ 客户端(Client) - Client 是向 Target 对象发送请求的对象。
9
+ */
10
+
11
+ import java .util .ArrayList ;
12
+ import java .util .List ;
13
+
14
+ public interface Filter {
15
+ public void execute (String request );
16
+ }
17
+
18
+ class AuthenticationFilter implements Filter {
19
+ public void execute (String request ){
20
+ System .out .println ("Authenticating request: " + request );
21
+ }
22
+ }
23
+
24
+ class DebugFilter implements Filter {
25
+ public void execute (String request ){
26
+ System .out .println ("request log: " + request );
27
+ }
28
+ }
29
+
30
+ class Target {
31
+ public void execute (String request ){
32
+ System .out .println ("Executing request: " + request );
33
+ }
34
+ }
35
+
36
+ class FilterChain {
37
+ private List <Filter > filters = new ArrayList <Filter >();
38
+ private Target target ;
39
+
40
+ public void addFilter (Filter filter ){
41
+ filters .add (filter );
42
+ }
43
+
44
+ public void execute (String request ){
45
+ for (Filter filter : filters ) {
46
+ filter .execute (request );
47
+ }
48
+ target .execute (request );
49
+ }
50
+
51
+ public void setTarget (Target target ){
52
+ this .target = target ;
53
+ }
54
+ }
55
+ class FilterManager {
56
+ FilterChain filterChain ;
57
+
58
+ public FilterManager (Target target ){
59
+ filterChain = new FilterChain ();
60
+ filterChain .setTarget (target );
61
+ }
62
+ public void setFilter (Filter filter ){
63
+ filterChain .addFilter (filter );
64
+ }
65
+
66
+ public void filterRequest (String request ){
67
+ filterChain .execute (request );
68
+ }
69
+ }
70
+
71
+ class Client {
72
+ FilterManager filterManager ;
73
+
74
+ public void setFilterManager (FilterManager filterManager ){
75
+ this .filterManager = filterManager ;
76
+ }
77
+
78
+ public void sendRequest (String request ){
79
+ filterManager .filterRequest (request );
80
+ }
81
+ }
82
+
83
+ public class J2eeInterceptingFilterDemo {
84
+ public static void main (String [] args ) {
85
+ FilterManager filterManager = new FilterManager (new Target ());
86
+ filterManager .setFilter (new AuthenticationFilter ());
87
+ filterManager .setFilter (new DebugFilter ());
88
+
89
+ Client client = new Client ();
90
+ client .setFilterManager (filterManager );
91
+ client .sendRequest ("HOME" );
92
+ }
93
+ }
94
+
95
+ //j2ee模式-拦截过滤器模式
0 commit comments