日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
【設計模式】通過飛書的審批流了解責任鏈模式

背景

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

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供玉龍網(wǎng)站建設、玉龍做網(wǎng)站、玉龍網(wǎng)站設計、玉龍網(wǎng)站制作等企業(yè)網(wǎng)站建設、網(wǎng)頁設計與制作、玉龍企業(yè)網(wǎng)站模板建站服務,十年玉龍做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡服務。

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

模式定義

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.

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

模式結構

模式實現(xiàn)

1.節(jié)點

審批節(jié)點定義

package com.example.designpattern.chainofresponsibility.handler;

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

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

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

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

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;

/**
 * 經(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.責任鏈

構建團組長、經(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;

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

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

    /**
     * 總監(jiān)
     */
    @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元費用的審批,是輪到經(jīng)理審批的,沒問題

500<750<1000

回顧

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

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


文章題目:【設計模式】通過飛書的審批流了解責任鏈模式
當前鏈接:http://www.dlmjj.cn/article/ccepose.html