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

【設(shè)計(jì)模式】通過(guò)飛書的審批流了解責(zé)任鏈模式

開(kāi)發(fā) 前端
通過(guò)給多個(gè)對(duì)象處理請(qǐng)求的機(jī)會(huì),避免將請(qǐng)求的發(fā)送方與其接收方耦合在一起。鏈接接收對(duì)象并沿著鏈傳遞請(qǐng)求,直到一個(gè)對(duì)象處理它。

背景

審批一個(gè)內(nèi)容,可以先從基層管理者(Handler A)開(kāi)始,如果經(jīng)過(guò)基層管理者無(wú)法滿足審批條件(handle),將到高層管理者(Handler B)進(jìn)行審批。

每個(gè)人審批節(jié)點(diǎn)只處理自己能力范圍內(nèi)的事情,這就和責(zé)任鏈模式十分吻合了。

模式定義

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.

通過(guò)給多個(gè)對(duì)象處理請(qǐng)求的機(jī)會(huì),避免將請(qǐng)求的發(fā)送方與其接收方耦合在一起。鏈接接收對(duì)象并沿著鏈傳遞請(qǐng)求,直到一個(gè)對(duì)象處理它。

模式結(jié)構(gòu)

模式實(shí)現(xiàn)

1.節(jié)點(diǎn)

審批節(jié)點(diǎn)定義

package com.example.designpattern.chainofresponsibility.handler;

/**
 * 責(zé)任鏈節(jié)點(diǎn)
 *
 * @author hongcunlin
 */
public abstract class Handler {
    /**
     * 下一個(gè)審批節(jié)點(diǎn)
     */
    protected Handler next;

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

    /**
     * 設(shè)置下一個(gè)節(jié)點(diǎn)
     *
     * @param next 節(jié)點(diǎn)
     */
    public void setNext(Handler next) {
        this.next = next;
    }
}

審批節(jié)點(diǎn)實(shí)現(xiàn),分別是組長(zhǎng)、經(jīng)理、總監(jiān)

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

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

/**
 * 組長(zhǎng)
 *
 * @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;

/**
 * 經(jīng)理
 *
 * @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;

/**
 * 總監(jiān)
 *
 * @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.責(zé)任鏈

構(gòu)建團(tuán)組長(zhǎng)、經(jīng)理、總監(jiān)的審批順序金額上限由低到高

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;

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

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

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

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

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

3.測(cè)試

package com.example.designpattern.chainofresponsibility;

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

import javax.annotation.Resource;

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

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

可以看到750元費(fèi)用的審批,是輪到經(jīng)理審批的,沒(méi)問(wèn)題

500<750<1000

回顧

本文對(duì)飛書審批流節(jié)點(diǎn)的審批,采用責(zé)任鏈模式實(shí)現(xiàn),同時(shí)是基于項(xiàng)目開(kāi)發(fā)中必用的Spring框架的,貼近實(shí)際開(kāi)發(fā)。

有空再通過(guò)日常生活,聊聊其中涉及的設(shè)計(jì)模式。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2021-12-24 07:50:45

責(zé)任鏈模式設(shè)計(jì)

2012-03-28 13:28:56

Java設(shè)計(jì)模式

2021-07-14 10:08:30

責(zé)任鏈模式加工鏈

2010-04-01 09:10:03

PHP設(shè)計(jì)模式責(zé)任鏈模式

2024-01-30 13:15:00

設(shè)計(jì)模式責(zé)任鏈

2023-06-05 07:55:31

2022-12-28 08:08:57

2021-06-09 07:15:15

責(zé)任鏈模式漲薪

2024-05-09 12:17:00

責(zé)任鏈設(shè)計(jì)模式

2022-11-01 08:46:20

責(zé)任鏈模式對(duì)象

2023-10-07 00:14:53

2021-08-14 08:17:49

Android設(shè)計(jì)模式OKHttp

2020-11-17 09:32:57

設(shè)計(jì)模式責(zé)任鏈

2024-06-04 13:11:52

Python行為設(shè)計(jì)模式開(kāi)發(fā)

2023-09-28 08:45:56

開(kāi)源責(zé)任鏈模式

2024-12-03 15:52:45

責(zé)任鏈Java

2023-10-07 00:17:06

AirDrop中介者模式

2021-06-05 17:59:00

責(zé)任鏈模式設(shè)計(jì)

2009-03-16 15:55:21

Java責(zé)任鏈模式

2021-05-25 09:00:52

責(zé)任鏈模式設(shè)計(jì)模式面試經(jīng)歷
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久久国产精品视频免费看 | 国产乱码精品一品二品 | 欧美久久久久久久久中文字幕 | 欧美一区二区在线观看 | 日本中文在线视频 | 久久久久久久久久久久久九 | 国产精品成人在线播放 | 国产午夜精品理论片a大结局 | 无毛av | 日韩欧美国产一区二区三区 | 色综合一区二区 | 欧美日一区 | 在线精品国产 | 亚洲网址 | 欧美高清dvd | 人人爽人人爽人人片av | 国产色| 在线观看视频你懂得 | 国产一区二区在线免费 | 欧美日韩国产在线观看 | 99精品国产一区二区三区 | 国产精品3区 | 91精品久久久久久久久久入口 | 亚洲国产精品视频一区 | 欧美一级免费 | 欧美日韩中文在线 | 中文一区 | 日本aa毛片a级毛片免费观看 | 日日操操操 | 日韩免费 | 在线视频成人 | 久久夜夜 | 国产91综合一区在线观看 | 五月天婷婷综合 | 天堂亚洲 | 午夜影院在线观看 | 国产.com| 你懂的国产 | 日韩在线中文字幕 | a毛片 | 日韩美香港a一级毛片免费 国产综合av |