职责链模式

一、概念

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

二、UML类图

职责链模式_第1张图片

三、基本代码实现

1、Handler 

public abstract class Handler {

        protected Handler successor;

        public abstract void hanleRequest(int request);

        public void setSuccessor(Handler successor) {

                this.successor = successor;

        }

}

2、ConcreteHandler1 ,ConcreteHandler2 ,ConcreteHandler3 根据request不同形成一条处理请求的链

public class ConcreteHandler1 extends Handler{

        @Override

        public void hanleRequest(int request) {

            if(request>0&&request<10){

                System.out.println("处理请求,"+request);

            }else if(successor!=null){

                successor.hanleRequest(request);

            }

      }

}

public class ConcreteHandler2 extends Handler{

        @Override

        public void hanleRequest(int request) {

            if(request>=20 && request<=30){

                System.out.println("处理请求,"+request);

            }else if(successor!=null){

                successor.hanleRequest(request);

            }

      }

}

public class ConcreteHandler3 extends Handler{

        @Override

        public void hanleRequest(int request) {

            if(request>=10 && request<=20){

                System.out.println("处理请求,"+request);

            }else if(successor!=null){

                successor.hanleRequest(request);

            }

        }

}

3、测试类

public class Main {

        public static void main(String[] args) {

                Handler h1 = new ConcreteHandler1();

                Handler h2 = new ConcreteHandler2();

                Handler h3 = new ConcreteHandler3();

                h1.setSuccessor(h2);

                h2.setSuccessor(h3);

                h1.hanleRequest(90);

        }

}

四、总结

        职责链模式最关键的在于当客户提交一个请求时,请求时沿链传递直到有一个ConcreteHandler对象负责处理它。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也不知道链中的结构。结果是职责链可以简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。

        在客户端定义链的结构,可以随时地增加或修改一个请求的结构。增强了给对象指派职责的灵活性。

        要担心一个请求极可能到了链的末端都得不到处理,或者因为没有正确配置而得不到处理,所以事先要考虑全面。

你可能感兴趣的:(职责链模式)