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