新聞中心
背景
審批一個內(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


咨詢
建站咨詢
