設計模式之責任鏈模式

2021-08-28 07:07:51 字數 2287 閱讀 7926

責任鏈模式是一種行為模式,它從乙個起點發起請求,沿著任務鏈傳遞給每個節點的物件,直至有乙個節點處理了這個請求。

它使得多個物件都有機會來處理請求,避免了請求的傳送者和接受者之間的耦合關係。將這些物件連成一條鏈,並沿著這條鏈傳遞請求,直到有物件處理它。

比較類似android的view的事件分發機制。

concretehandler: 具體的處理者,實現了handlerequest方法,如果不處理則將請求傳送給下乙個節點的物件。

抽象處理者

public

abstract

class

resolver

}

實際處理者1

public

class

concreateresolver1

extends

resolver

else

}}

實際處理者2

public

class

concreateresolver2

extends

resolver

else

}}

客戶端

public

class

client

}

客戶端呼叫結果

resolver2 solved this request

可以看到,condition不滿足實際處理者1的處理規則,因此處理者1將事件發給了處理者2進行處理

簡單版中,傳遞的都是統一的字串,處理也比較簡單。但實際開發中,責任鏈中的請求處理規則一般是不同的,這時就需要對請求進行封裝,同時對請求的處理規則也進行封裝,

抽象處理者

public

abstract

class

abstractresolver

else

else}}

protected

abstract

intgetsolvelevel()

;protected

abstract

void

solve

(abstractrequest request)

;}

抽象請求

public

abstract

class

abstractrequest

public object getcontent()

public

abstract

intgetrequestlevel()

;}

三個請求(省略後兩個)

public

class

request1

extends

abstractrequest

@override

public

intgetrequestlevel()

}

三個處理者(省略後兩個)

public

class

resolver1

extends

abstractresolver

@override

protected

void

solve

(abstractrequest request)

}

客戶端呼叫

public

class

client

}

客戶端執行結果

resolver1處理了請求:1

resolver2處理了請求:2

resolver3處理了請求:3

缺點

廣告時間

我是n0texpecterr0r,一名廣東工業大學的大二學生

歡迎來到我的個人部落格,所有文章均在個人部落格中同步更新哦

設計模式之 責任鏈模式

在一些情況下,對乙個訊息 含事件 的響應和處理需要很多物件來參與,這些物件對訊息的處理有前後順序,形成乙個處理鏈條,但物件是否真正處理訊息有賴於在它之前的物件的處理策略,前乙個物件處理後,後乙個物件則不需參與處理,這就是責任鏈模式。現實中有很多類似的場景,比如上訪,上訪一般是從最基層的信訪部門接受信...

設計模式之(責任鏈模式)

chain of responsibleity 責任鏈模式 在責任鏈模式 中,很多物件由每乙個物件對其下家的引用而接。起來形成一條鏈。請求在這個鏈上傳遞,直到鏈上的某乙個物件決定處理此請求。客戶並不知道鏈上的哪乙個物件最終處理這個請求,系統可以在不影響客戶端的情況下動態的重新組織鏈和分配責任。處理者...

設計模式之責任鏈模式

假設現在乙個公司的請假流程如下 一天及以下由小組組長審批,一天以上三天以下由經理審批,三天以上七天以下由老闆審批,七天以上直接勸退。如果每次請假時都很長的if else 來判斷該去找誰請假,很不容易擴充套件,我們使用責任鏈模式來實現。首先,是乙個抽象的父類 public abstract class...