A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 大蓝鲸Java 于 2017-12-1 12:37 编辑

【南京校区】常见的设计模式--职责链模式

概述:在web阶段的过滤器filter,底层实际是职责链模式

     
        职责链模式定义:
        使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.
        将这个对象连成一条链,并沿着这个链传递该请求,直到有一个对象处理为止

        具体代码设计
        1.创建一个抽象类
        /**
         * 创建一个抽象类
         */
        public abstract class Handler {
            public Handler successor;
            /**
             * 设置下一个处理者
             * @param successor
             */
            public void setSuccessor(Handler successor){
                this.successor = successor;
            }
            
            /**
             * 处理请求
             */
            public abstract void handlerRequest(int request);
        }
   
        2.创建三个类,继承抽象类Handler
        /**
         * 创建第一个处理请求的类
         */
        public class ConcreteHandler1 extends Handler {
        
            @Override
            public void handlerRequest(int request) {
                if (request > 0 && request < 10) {
                    System.out.println(this.getClass().getSimpleName() + "处理请求: " + request);
                }else {
                    successor.handlerRequest(request);
                }
            }
        }

        /**
         * 创建第二个处理请求的类
         */
        public class ConcreteHandler2 extends Handler {
        
            @Override
            public void handlerRequest(int request) {
                if (request >= 10 && request < 20) {
                    System.out.println(this.getClass().getSimpleName() + "处理请求: " + request);
                }else {
                    successor.handlerRequest(request);
                }
            }
        }

        /**
         * 创建第三个处理请求的类
         */
        public class ConcreteHandler3 extends Handler {
        
            @Override
            public void handlerRequest(int request) {
                if (request >= 20 && request < 30) {
                    System.out.println(this.getClass().getSimpleName() + "处理请求: " + request);
                }else {
                    successor.handlerRequest(request);
                }
            }
        }


        3.创建一个测试类
        public class Test {
            public static void main(String[] args) {
                Handler h1 = new ConcreteHandler1();
                Handler h2 = new ConcreteHandler2();
                Handler h3 = new ConcreteHandler3();
               
                h1.setSuccessor(h2);
                h2.setSuccessor(h3);
               
                int[] requests = {2, 5, 14, 22, 18, 3, 27, 20};
                for (int i : requests) {
                    h1.handlerRequest(i);
                }
            }
        }

2 个回复

倒序浏览
郭俊峰老师 来自手机 高级黑马 2017-12-3 16:27:22
沙发
不错 设计模式这块还是有很多面试中会提到
回复 使用道具 举报
敲黑板,同学们同学们,划重点啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马