Golang責任鏈設計模式(十三)

2021-09-24 04:03:54 字數 2073 閱讀 3258

github:

顧名思義,責任鏈模式為請求建立了乙個接受者物件的鏈,這種模式給予請求的型別,對請求的傳送者和接受者進行解偶。這種型別的設計模式屬於行為模式。

在這種模式中,通常每個接受者都包含對另乙個接受者的引用。如果乙個物件不能處理該請求,那麼它會把相同的請求傳遞給下乙個接收者,以此類推。

意圖:避免請求傳送者與接受者耦合在一起,讓多個物件都有可能接收請求,將這些物件連線成一條鏈,並且沿著這條鏈傳遞請求,直到有物件處理它為止。

主要解決:職責鏈上的處理者負責處理請求,客戶只需要將請求傳送到職責鏈上即可,無須關心請求的處理細節和請求的傳遞,所以職責鏈將請求的傳送者和請求的處理者解偶了。

何時使用:在處理訊息的時候以過濾很多道。

如何解決:攔截的類都實現統一介面。

優點:缺點:

使用場景:

建立abstractlogger,帶有詳細的日誌記錄級別。然後我們建立三種型別的記錄器,都擴充套件了abstractlogger。每個記錄器訊息的級別

是否屬於自己的級別,如果是則相應列印出來,否則將訊息傳遞給下乙個記錄器。

package chainofresponsibilitypattern

const (

info = iota + 1

debug

error

)type logger inte***ce

type abstractlogger struct

func (s *abstractlogger) write(message string)

func (s *abstractlogger) setnextlogger(logger logger)

func (s *abstractlogger) logmessage(level int, message string, logger logger) else

}}

package chainofresponsibilitypattern

import "fmt"

type consolelogger struct

func (c *consolelogger) write(message string)

func (c *consolelogger) logmessage(level int, message string, logger logger)

package chainofresponsibilitypattern

import "fmt"

type errorlogger struct

func (e *errorlogger) write(message string)

func (e *errorlogger) logmessage(level int, message string, logger logger)

package chainofresponsibilitypattern

import "fmt"

type filelogger struct

func (f *filelogger) write(message string)

func (f *filelogger) logmessage(level int, message string, logger logger)

package chainofresponsibilitypattern

func testchainofresponsibilitypattern() logger

func testchainofresponsibilitypattern()
輸出:

standard console::logger: this is an information.

file::logger: this is a debug level information.

error console::logger: this is an error information.

設計模式 責任鏈

使用情況描述 某人向銀行借錢 借1w一下一般櫃員就可以解決,借2w一下一般經理就能解決,如果借更多就需要主管才能解決。這就是乙個責任鏈,根據條件的不同,分別進行複雜的邏輯運算。if,switch都可以進行這樣的操作,但是需要在每一層進行一次複雜的操作。責任鏈模式是一種物件的行為模式。在責任鏈模式裡,...

責任鏈設計模式

責任鏈的應用場景 簡單使用責任鏈模式拆分 servlet api 中的過濾器 模擬servlet中的request物件 desc模擬 servlet 中的 request 物件 模擬servlet中的response物件 desc模擬 servlet 中的 response 物件 過濾器抽象層 de...

設計模式 責任鏈

引用 objective c程式設計之道 ios設計模式解析 責任鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間發生耦合。此模式將這些物件連成一條鏈,從而沿著這條鏈傳遞請求,直到有乙個物件處理它為止。責任鏈主要思想 很多物件引用了同一型別的另乙個物件,形成了一條鏈。鏈中每個物件...