美文网首页
职责链模式

职责链模式

作者: 守住阳光 | 来源:发表于2018-07-06 17:51 被阅读0次

    一、概念

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

    二、UML类图

    三、基本代码实现

    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对象负责处理它。这就使得接收者和发送者都没有对方的明确信息,且链中的对象自己也不知道链中的结构。结果是职责链可以简化对象的相互连接,它们仅需保持一个指向其后继者的引用,而不需要保持它所有的候选接受者的引用。

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

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

    相关文章

      网友评论

          本文标题:职责链模式

          本文链接:https://www.haomeiwen.com/subject/zfybuftx.html