zoukankan      html  css  js  c++  java
  • 【设计模式】—— 职责链模式ChainOfResponsibility

      前言:【模式总览】——————————by xingoo

      模式意图

      避免请求的发送者,和接受者过度的耦合在一起。一个请求者只需要发送一个请求即可,它的请求具体由后面哪个对象进行响应,并不需要关心。而请求的接受者可以自己处理它,也可以把它像链条一样向后传。

      因此,请求也就意味着有可能丢失,或者说没有确切的安全保障。

      应用场景

      1 降低耦合度

      2 增强指派职责的灵活性

      3 不保证被接受

      模式结构

      Handler 定义一个接口,实现向后传递的过程

     1 abstract class Handler{
     2     protected Handler successor;
     3     
     4     public abstract void handleRequest();
     5     
     6     public Handler getSuccessor() {
     7         return successor;
     8     }
     9     
    10     public void setSuccesor(Handler successor) {
    11         this.successor = successor;
    12     }
    13     
    14 }

      ConcreteHandler 可以负责请求,也可以向后传递

     1 class ConcreteHandler extends Handler{
     2     public void handleRequest(){
     3         if(getSuccessor() != null){
     4             System.out.println("getSuccessor !");
     5             getSuccessor().handleRequest();
     6         }else{
     7             System.out.println("handle in this! request()!");
     8         }
     9     }
    10 }

      全部代码

     1 package com.xingoo;
     2 abstract class Handler{
     3     protected Handler successor;
     4     
     5     public abstract void handleRequest();
     6     
     7     public Handler getSuccessor() {
     8         return successor;
     9     }
    10     
    11     public void setSuccesor(Handler successor) {
    12         this.successor = successor;
    13     }
    14     
    15 }
    16 class ConcreteHandler extends Handler{
    17     public void handleRequest(){
    18         if(getSuccessor() != null){
    19             System.out.println("getSuccessor !");
    20             getSuccessor().handleRequest();
    21         }else{
    22             System.out.println("handle in this! request()!");
    23         }
    24     }
    25 }
    26 public class Client {
    27     public static void main(String[] args) {
    28         Handler handle1,handle2,handle3;
    29         handle1 = new ConcreteHandler();
    30         handle2 = new ConcreteHandler();
    31         handle3 = new ConcreteHandler();
    32         handle1.setSuccesor(handle2);
    33         handle2.setSuccesor(handle3);
    34         handle1.handleRequest();
    35     }
    36 }
    View Code

      运行结果

    getSuccessor !
    getSuccessor !
    handle in this! request()!
  • 相关阅读:
    《敏捷软件需求》阅读笔记三
    《敏捷软件需求》阅读笔记二
    《敏捷软件需求》阅读笔记一
    《需求工程-软件建模与分析》阅读笔记三
    《需求工程-软件建模与分析》阅读笔记二
    《需求工程-软件建模与分析》阅读笔记一
    C#.NET程序设计实验三实验报告
    C#.NET程序设计实验二实验报告
    C#.NET程序设计实验一实验报告
    oracle——存储数据时的编码问题
  • 原文地址:https://www.cnblogs.com/xing901022/p/4072255.html
Copyright © 2011-2022 走看看