設計模式 職責鏈模式

2021-10-16 06:09:23 字數 2855 閱讀 6067

在職責鏈模式中,多個處理器依次處理同乙個請求。乙個請求先經過a處理器處理,然後再把請求傳遞給b處理器,b處理器處理完後再傳遞給c處理器,以此類推,形成乙個鏈條。鏈條上的每個處理器各自承擔各自的處理職責,所以叫作職責鏈模式

在gof給出的定義中,如果處理器鏈上的某個處理器能夠處理這個請求,那就不會繼續往下傳遞請求。實際上,職責鏈模式還有一種變體,那就是請求會被所有的處理器都處理一遍,不存在中途終止的情況

1)、使用鍊錶來儲存處理器

public

abstract

class

handler

public

final

void

handle()

}protected

abstract

boolean

dohandle()

;}

public

class

handlera

extends

handler

}

public

class

handlerb

extends

handler

}

public

class

handlerchain

tail.

setnexthandler

(handler)

; tail = handler;

}public

void

handle()

}}

public

class

}

handler是所有處理器類的抽象父類,dohandle()是抽象方法,handle()決定了每經過乙個處理器,如果它能處理該請求,就不繼續往下傳遞;如果不能處理,則交由後面的處理器來處理(也就是呼叫nexthandler.handle())。handlerchain是處理器鏈,從資料結構的角度來看,它就是乙個記錄了鏈頭、鏈尾的鍊錶。其中,記錄鏈尾是為了方便新增處理器

2)、使用陣列來儲存處理器

public

inte***ce

ihandler

public

class

handlera

implements

ihandler

}

public

class

handlerb

implements

ihandler

}

public

class

handlerchain

public

void

handle()}}}

public

class

}

自定義interceptor一般會實現handlerinterceptor介面中的方法:

spring interceptor是基於職責鏈模式實現,乙個請求的處理流程如上圖所示,handlerexecutionchain類是職責鏈模式中的處理器鏈,核心**如下:

設計模式 職責鏈模式

2008年08月17日 星期日 下午 04 28 using system using system.collections.generic using system.text public officer officer o public abstract void deal action a c...

設計模式 職責鏈模式

1 request.h ifndef request h define request h include include using namespace std class request 請求類定義 endif request h 2 manager.h ifndef manager h def...

設計模式 職責鏈模式

今天跟大家分享下設計模式中的職責鏈模式。不知道大家在學習職責鏈模式的時候是否感覺困難。我剛開始學的時候就被整暈了。呵呵,進入正題。職責鏈模式是物件行為型模式中比較有特點的設計模式了,的確有意思,它可以像資料結構中煉表一樣傳遞。其實生活中好多的行為方式都體現了職責鏈模式,我們初期學習者可以把職責鏈模式...