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 }
  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/agilestyle/p/11407114.html
Copyright © 2011-2022 走看看