成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

【設計模式】通過飛書的審批流了解責任鏈模式

開發 前端
通過給多個對象處理請求的機會,避免將請求的發送方與其接收方耦合在一起。鏈接接收對象并沿著鏈傳遞請求,直到一個對象處理它。

背景

審批一個內容,可以先從基層管理者(Handler A)開始,如果經過基層管理者無法滿足審批條件(handle),將到高層管理者(Handler B)進行審批。

每個人審批節點只處理自己能力范圍內的事情,這就和責任鏈模式十分吻合了。

模式定義

Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. Chain the receiving objects and pass the request along the chain until an object handles it.

通過給多個對象處理請求的機會,避免將請求的發送方與其接收方耦合在一起。鏈接接收對象并沿著鏈傳遞請求,直到一個對象處理它。

模式結構

模式實現

1.節點

審批節點定義

package com.example.designpattern.chainofresponsibility.handler;

/**
 * 責任鏈節點
 *
 * @author hongcunlin
 */
public abstract class Handler {
    /**
     * 下一個審批節點
     */
    protected Handler next;

    /**
     * 處理
     *
     * @param amount 金額
     */
    public abstract void handle(int amount);

    /**
     * 設置下一個節點
     *
     * @param next 節點
     */
    public void setNext(Handler next) {
        this.next = next;
    }
}

審批節點實現,分別是組長、經理、總監

package com.example.designpattern.chainofresponsibility.handler.impl;

import com.example.designpattern.chainofresponsibility.handler.Handler;
import org.springframework.stereotype.Component;

/**
 * 組長
 *
 * @author hongcunlin
 */
@Component("teamLeader")
public class TeamLeader extends Handler {
    /**
     * 上限金額
     */
    private static final Integer LIMITED_AMOUNT = 500;

    @Override
    public void handle(int amount) {
        if (amount < LIMITED_AMOUNT) {
            System.out.println("TeamLeader approved");
        } else if (null != next) {
            next.handle(amount);
        }
    }
}
package com.example.designpattern.chainofresponsibility.handler.impl;

import com.example.designpattern.chainofresponsibility.handler.Handler;
import org.springframework.stereotype.Component;

/**
 * 經理
 *
 * @author hongcunlin
 */
@Component("manager")
public class Manager extends Handler {
    /**
     * 上限金額
     */
    private static final Integer LIMITED_AMOUNT = 1000;

    @Override
    public void handle(int amount) {
        if (amount < LIMITED_AMOUNT) {
            System.out.println("Manager approved");
        } else if (null != next) {
            next.handle(amount);
        }
    }
}
package com.example.designpattern.chainofresponsibility.handler.impl;

import com.example.designpattern.chainofresponsibility.handler.Handler;
import org.springframework.stereotype.Component;

/**
 * 總監
 *
 * @author hongcunlin
 */
@Component("director")
public class Director extends Handler {
    /**
     * 上限金額
     */
    private static final Integer LIMITED_AMOUNT = 1000;

    @Override
    public void handle(int amount) {
        if (amount < LIMITED_AMOUNT) {
            System.out.println("Director approved");
        } else if (null != next) {
            next.handle(amount);
        }
    }
}

2.責任鏈

構建團組長、經理、總監的審批順序金額上限由低到高

package com.example.designpattern.chainofresponsibility;

import com.example.designpattern.chainofresponsibility.handler.Handler;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

/**
 * 責任鏈
 *
 * @author hongcunlin
 */
@Component("handlerChain")
public class HandlerChain {
    /**
     * 組長
     */
    @Resource(name = "teamLeader")
    private Handler teamLeader;

    /**
     * 經理
     */
    @Resource(name = "manager")
    private Handler manager;

    /**
     * 總監
     */
    @Resource(name = "director")
    private Handler director;

    /**
     * 構建責任鏈
     */
    @PostConstruct
    public void init() {
        teamLeader.setNext(manager);
        manager.setNext(director);
    }

    /**
     * 處理請求
     *
     * @param amount 金額
     */
    public void handleRequest(int amount) {
        teamLeader.handle(amount);
    }
}

3.測試

package com.example.designpattern.chainofresponsibility;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * 責任鏈模式測試
 *
 * @author hongcunlin
 */
@SpringBootTest
public class DesignPatternTest {
    /**
     * 責任鏈
     */
    @Resource(name = "handlerChain")
    private HandlerChain handlerChain;

    /**
     * 測試審批
     */
    @Test
    public void test() {
        handlerChain.handleRequest(750);
    }
}

可以看到750元費用的審批,是輪到經理審批的,沒問題

500<750<1000

回顧

本文對飛書審批流節點的審批,采用責任鏈模式實現,同時是基于項目開發中必用的Spring框架的,貼近實際開發。

有空再通過日常生活,聊聊其中涉及的設計模式。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2021-12-24 07:50:45

責任鏈模式設計

2012-03-28 13:28:56

Java設計模式

2021-07-14 10:08:30

責任鏈模式加工鏈

2010-04-01 09:10:03

PHP設計模式責任鏈模式

2024-01-30 13:15:00

設計模式責任鏈

2023-06-05 07:55:31

2022-12-28 08:08:57

2021-06-09 07:15:15

責任鏈模式漲薪

2024-05-09 12:17:00

責任鏈設計模式

2022-11-01 08:46:20

責任鏈模式對象

2023-10-07 00:14:53

2020-11-17 09:32:57

設計模式責任鏈

2021-08-14 08:17:49

Android設計模式OKHttp

2024-06-04 13:11:52

Python行為設計模式開發

2023-09-28 08:45:56

開源責任鏈模式

2024-12-03 15:52:45

責任鏈Java

2023-10-07 00:17:06

AirDrop中介者模式

2021-06-05 17:59:00

責任鏈模式設計

2009-03-16 15:55:21

Java責任鏈模式

2021-05-25 09:00:52

責任鏈模式設計模式面試經歷
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日日夜夜91| 一区二区三区欧美 | 亚洲精品视频久久 | 天天干天天玩天天操 | 在线观看视频91 | 久久久久久国产 | 成人精品系列 | 精品久久久久久 | 亚洲九色 | 欧美精品一区三区 | 免费一区 | 亚洲一区二区 | 欧美日韩在线精品 | 日韩av看片| 中文字幕在线观看第一页 | 精品久久久久一区二区国产 | 久久99久久98精品免观看软件 | 久久久久国产一级毛片 | 久久人爽 | 91就要激情 | 成人h免费观看视频 | 99亚洲综合 | 久久久久久久久一区 | 欧美激情一区二区三区 | 一级黄色影片在线观看 | 国产欧美精品区一区二区三区 | 中文字幕精品视频 | 天天色官网 | 欧美男人亚洲天堂 | 精品av| 成人三级网址 | 高清av电影 | 成人免费视频网站在线看 | 永久网站| 国产精品夜间视频香蕉 | 无码日韩精品一区二区免费 | 97色在线视频 | 久久久久久久久久久成人 | 久久久看 | 精品欧美一区二区精品久久久 | 国产免费黄网 |