zoukankan      html  css  js  c++  java
  • 学习笔记——责任链模式

    模拟实现类:

     1 /**
     2  *责任链模式: 将处理同一类事务的所有对象按次序连接在一起(就像连成一条锁链一样),
     3  * 依次去处理待定事务,如果该对象处理不了,就传给其后的对象来处理
     4  */
     5 public abstract class Leader {
     6     public Leader(String  name, Leader nextLeader){
     7         this.name = name;
     8         this.nextLeader = nextLeader;
     9     }
    10 
    11     public void setNextLeader(Leader nextLeader){
    12         this.nextLeader = nextLeader;
    13     }
    14 
    15     public abstract void handleRequest(LeaveRequest request);
    16 
    17     protected String name;
    18     protected Leader nextLeader;
    19 }
    20 
    21 class Director extends Leader{
    22     public Director(String name, Leader nextLeader){
    23         super(name, nextLeader);
    24     }
    25 
    26     @Override
    27     public void handleRequest(LeaveRequest request) {
    28         if(request.getDay() <= 5){
    29             System.out.println(name + "Director: OK!");
    30         } else{
    31             if(nextLeader != null){
    32                 nextLeader.handleRequest(request);
    33             }
    34         }
    35     }
    36 }
    37 
    38 class Manager extends Leader{
    39     public Manager(String name, Leader nextLeader){
    40         super(name, nextLeader);
    41     }
    42 
    43     @Override
    44     public void handleRequest(LeaveRequest request) {
    45         if(request.getDay() <= 10){
    46             System.out.println(name + "Manager: OK!");
    47         } else{
    48             if(nextLeader != null){
    49                 nextLeader.handleRequest(request);
    50             }
    51         }
    52     }
    53 }
    54 
    55 class GeneralManager extends Leader{
    56     public GeneralManager(String name){
    57         super(name, null);
    58     }
    59 
    60     @Override
    61     public void handleRequest(LeaveRequest request) {
    62         System.out.println(name + "GeneralManager: OK!");
    63     }
    64 }
    View Code
     1 public class LeaveRequest {
     2     public LeaveRequest(String name, int day, String reason){
     3         this.name = name;
     4         this.day = day;
     5         this.reason = reason;
     6     }
     7 
     8     public String getName() {
     9         return name;
    10     }
    11 
    12     public void setName(String name) {
    13         this.name = name;
    14     }
    15 
    16     public int getDay() {
    17         return day;
    18     }
    19 
    20     public void setDay(int day) {
    21         this.day = day;
    22     }
    23 
    24     public String getReason() {
    25         return reason;
    26     }
    27 
    28     public void setReason(String reason) {
    29         this.reason = reason;
    30     }
    31 
    32     private String name;
    33     private int day;
    34     private String reason;
    35 }
    View Code

    测试类:

    1 public class Test{
    2     public static void main(String[] args){
    3         Leader leader1 = new GeneralManager("张三");
    4         Leader leader2 = new Manager("李四", leader1);
    5         Leader leader3 = new Director("王五", leader2);
    6         leader3.handleRequest(new LeaveRequest("小李", 7, "结婚"));
    7     }
    8 }
    View Code
  • 相关阅读:
    BEC listen and translation exercise 16
    BEC listen and translation exercise 15
    BEC listen and translation exercise 14
    PyQt(Python+Qt)学习随笔:toolButton的popupMode属性
    PyQt(Python+Qt)学习随笔:实现toolButton与Action的关联
    PyQt(Python+Qt)学习随笔:Qt Designer中连接Action和槽函数
    PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮
    PyQt(Python+Qt)学习随笔:快速理解Qt 中Action是什么
    PyQt(Python+Qt)实战:使用QCamera、QtMultimedia等实现摄像头拍照
    第15.13节 PyQt(Python+Qt)入门学习:Qt Designer的Spacers部件详解
  • 原文地址:https://www.cnblogs.com/Hr666/p/10384710.html
Copyright © 2011-2022 走看看