zoukankan      html  css  js  c++  java
  • 职责链模式ChainOfResponsibility

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11407114.html 

    1.定义

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

    2.结构图

    Handler:定义职责的接口,通常在这里定义处理请求的方法,可以在这里实现后继链。
    ConcreteHandler:实现职责的类,在这个类中,实现对在它职责范围内请求的处理,如果处理,就继续转发请求给后继者。
    Client:职责链的客户端,向链上的具体处理对象提交请求,让职责链负责处理。

    3.本质

    职责链模式的本质:分离职责,动态组合。

    4.Code Demo

    Handler.java

     1 package org.fool.dp.cor;
     2 
     3 public abstract class Handler {
     4     protected Handler successor;
     5 
     6     public void setSuccessor(Handler successor) {
     7         this.successor = successor;
     8     }
     9 
    10     public abstract void handleRequest();
    11 }

    ConcreteHandler1.java

     1 package org.fool.dp.cor;
     2 
     3 public class ConcreteHandler1 extends Handler {
     4     @Override
     5     public void handleRequest() {
     6         boolean someCondition = false;
     7 
     8         if (someCondition) {
     9             System.out.println("ConcreteHandler1 invoked...");
    10         } else {
    11             if (successor != null) {
    12                 successor.handleRequest();
    13             }
    14         }
    15     }
    16 }

    ConcreteHandler2.java

     1 package org.fool.dp.cor;
     2 
     3 public class ConcreteHandler2 extends Handler {
     4     @Override
     5     public void handleRequest() {
     6         boolean someCondition = false;
     7 
     8         if (someCondition) {
     9             System.out.println("ConcreteHandler2 invoked...");
    10         } else {
    11             if (successor != null) {
    12                 successor.handleRequest();
    13             }
    14         }
    15     }
    16 }

    ConcreteHandler3.java

     1 package org.fool.dp.cor;
     2 
     3 public class ConcreteHandler3 extends Handler {
     4     @Override
     5     public void handleRequest() {
     6         boolean someCondition = true;
     7 
     8         if (someCondition) {
     9             System.out.println("ConcreteHandler3 invoked...");
    10         } else {
    11             if (successor != null) {
    12                 successor.handleRequest();
    13             }
    14         }
    15     }
    16 }

    Client.java

     1 package org.fool.dp.cor;
     2 
     3 public class Client {
     4     public static void main(String[] args) {
     5         Handler handler1 = new ConcreteHandler1();
     6         Handler handler2 = new ConcreteHandler2();
     7         Handler handler3 = new ConcreteHandler3();
     8 
     9         handler1.setSuccessor(handler2);
    10         handler2.setSuccessor(handler3);
    11 
    12         handler1.handleRequest();
    13     }
    14 }
  • 相关阅读:
    [leetcode]7. Reverse Integer
    [leetcode] 6. ZigZag Conversion
    [leetcode] 5.Longest Palindromic Substring-2
    [leetcode] 5.Longest Palindromic Substring-1
    [leetcode]4. Median of Two Sorted Arrays
    [leetcode]3. Longest Substring Without Repeating Characters
    [leetcode]2. Add Two Numbers
    [chrome]download chrome offline installer package / 下载chrome离线安装包
    [powershell]powershell upgrade package
    [python]python cockbook
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11407114.html
Copyright © 2011-2022 走看看