設計模式之美筆記 職責鏈模式

2021-10-12 06:08:39 字數 1551 閱讀 5219

設計模式之美 - 61

職責鏈模式的定義:將請求的傳送和接收解耦,讓多個接收物件都有機會處理這個請求。將這些接收物件串成一條鏈,並沿著這條鏈傳遞這個請求,直到鏈上的某個接收物件能夠處理它為止。

多個處理器處理同乙個請求,處理器a完成處理後,把請求交給處理器b,處理器b處理完成後,將請求處理給c,以此類推,鏈條上的每個處理器各自承擔各自的處理職責,所以叫作職責鏈模式。

netty 框架在處理訊息時使用的 pipeline 就是一種責任鏈模式。

目錄

一、職責鏈有兩種方式:

二、職責鏈模式的**實現

三、職責鏈模式專案應用

四、框架中的過濾器,***的實現

servlet filter :

spring interceptor:

獲取到可處理請求的處理器處理完成後,終止處理鏈條

乙個請求會走完整個處理鏈條的每乙個處理節點

1、使用模板模式,實現乙個抽象處理器父類(handler),裡面包含抽象方法dohandle(),每乙個具體是處理器類(hanldera,handlerb)實現自己的處理邏輯。

2、通過乙個鍊錶存放處理器,作為處理器鏈(handlerchain),也可採用資料來儲存處理器類,更簡單

3、通過handle()方法,實現處理類處理請求後可決定是否終端鏈條

// 抽象處理器父類

public abstract class handler

// 共用邏輯,控制節點執行完成是否退出鏈條

public final void handle1()

} // 共用邏輯,每個請求都會走完鏈條的所有節點

public final void handle2()

} // 子類所需重寫的模板方法

protected abstract boolean dohandle();

}public class handlera extends handler

}public class handlerb extends handler

}public class handlerchain

tail.setsuccessor(handler);

tail = handler;

} public void handle()

}}// 使用舉例

public static void main(string args)

}

在場景化查詢過程中,對於返回結果中的資訊進行脫敏

設計模式之美 - 63

可以攔截http請求,進行相關的限流,鑑權等操作。

servlet filter 是 servlet 規範的一部分,實現依賴於 web 容器

spring interceptor 是 spring mvc 框架的一部分,由 spring mvc 框架來提供實現。

客戶端傳送的請求,會先經過 servlet filter,然後再經過 spring interceptor,最後到達具體的業務**中。

設計模式之職責鏈模式

如果我們現在有乙個需求,乙個人他生了病,這個病要在 醫院才能看,但是這個病人並不清楚,就先去了一級醫院,一級醫院的醫生告訴他你的病要去二級醫院看,二級醫院也告訴他 你的病我這裡看不了,你要去 醫院才能看,最後他去 醫院把病看好了.這個過程直接寫成 class patient this.patient...

設計模式之職責鏈模式

職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞該請求,直到有乙個物件處理它為止。適用場景 1 有多個的物件可以處理乙個請求,哪個物件處理該請求執行時刻自動確定 2 在不明確指定接收者的情況下,向多個物件中的乙個提交乙個請求 ...

設計模式之職責鏈模式

職責鏈模式 chain of responsibility 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將多個物件連成一條鏈,沿著這條鏈傳遞請求直到有物件處理它為止。可以定義乙個抽象類來表示處理事件的物件,這個類首先有個處理事件的抽象方法,然後提供乙個方法設定下一級處理者...