责任链模式

简介:

责任链模式通俗点讲就是,打开层次箱子,最终发现真正的珠宝。

 

模式:

1.假设层层箱子分别为A、B、C、D,珠宝为X。

2.先将X放在D中,那么D认为X是珠宝;在把D放在C中,那么C认为D是珠宝;再把C放在B中,那么B认为C是珠宝;再把B放在A中,那么A认为B是珠宝。

3.执行A-B-C-D-X.

 

代码:

1.箱子抽象为接口

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 import com.bluejie.bluej.logUtil.LogUtil;
 4 import org.slf4j.Logger;
 5 
 6 /**
 7  * Created by bluej on 2018/2/1.
 8  */
 9 public interface Handler {
10 
11     Logger log = LogUtil.instance(Handler.class);
12 
13     void doHandle(Executor executor);
14 }
Handler

  

2.各层箱子实现类

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 /**
 4  * Created by bluej on 2018/2/1.
 5  */
 6 public class LogHandler implements Handler {
 7     @Override
 8     public void doHandle(Executor executor) {
 9         log.info("--LogHandler--");
10         executor.doExecutor();
11     }
12 }
LogHandler

 

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 /**
 4  * Created by bluej on 2018/2/1.
 5  */
 6 public class ParamaterHandler implements Handler {
 7     @Override
 8     public void doHandle(Executor executor) {
 9         log.info("--ParamaterHandler--");
10         executor.doExecutor();
11     }
12 }
ParamaterHandler

 

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 /**
 4  * Created by bluej on 2018/2/1.
 5  */
 6 public class ServiceHandler implements Handler {
 7     @Override
 8     public void doHandle(Executor executor) {
 9         log.info("--ServiceHandler--");
10         executor.doExecutor();
11     }
12 }
ServiceHandler

 

3.珠宝抽象为接口

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 import com.bluejie.bluej.logUtil.LogUtil;
 4 import org.slf4j.Logger;
 5 
 6 /**
 7  * Created by bluej on 2018/2/1.
 8  */
 9 public interface Executor {
10     Logger log = LogUtil.instance(Executor.class);
11 
12     void doExecutor();
13 }
Executor

 

4.珠宝实现类

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 /**
 4  * Created by bluej on 2018/2/1.
 5  */
 6 public class ExecutorService implements Executor {
 7     @Override
 8     public void doExecutor() {
 9         log.info("--ExecutorService--");
10     }
11 }
ExecutorService

 

5.执行demo

 1 package com.bluejie.bluej.java.design.chain;
 2 
 3 
 4 import java.util.ArrayList;
 5 import java.util.Arrays;
 6 import java.util.Collections;
 7 import java.util.List;
 8 
 9 /**
10  * Created by bluej on 2018/2/1.
11  */
12 public class ChainDemo {
13     private static ChainDemo chainDemo =new ChainDemo();
14 
15     public static void main(String[] args) {
16         chainDemo.execute().doExecutor();
17     }
18 
19     private Executor execute(){
20 
21         Executor executor = new ExecutorService();
22         List<Handler> handleList  = new ArrayList<>();
23         handleList.add(new LogHandler());
24         handleList.add(new ParamaterHandler());
25         handleList.add(new ServiceHandler());
26         Collections.reverse(handleList);
27 
28         for (int i = 0 ;i<handleList.size(); i++) {
29             System.out.println(i);
30             final  Handler handle = handleList.get(i);
31             final Executor executorAgain = executor;
32             executor = new Executor() {
33                 @Override
34                 public void doExecutor() {
35                     handle.doHandle(executorAgain);
36                 }
37             };
38         }
39         return executor;
40 
41     }
42 
43 }
ChainDemo

 

6.执行结果

0
1
2
2018-02-02 00:33:29,270 [main] INFO  com.bluejie.bluej.java.design.chain.Handler.doHandle   - --LogHandler--
2018-02-02 00:33:29,276 [main] INFO  com.bluejie.bluej.java.design.chain.Handler.doHandle   - --ParamaterHandler--
2018-02-02 00:33:29,276 [main] INFO  com.bluejie.bluej.java.design.chain.Handler.doHandle   - --ServiceHandler--
2018-02-02 00:33:29,276 [main] INFO  com.bluejie.bluej.java.design.chain.Executor.doExecutor - --ExecutorService--
执行结果

 

posted on 2018-02-02 00:24  bluej  阅读(147)  评论(0编辑  收藏  举报

导航