2012-07-22 77 views
3

我仍然試圖瞭解循環引用的危險。我經常讀到他們應該只在極少數情況下使用。但是,在規範的狀態模式中,「狀態」對象需要引用「上下文」對象才能引發轉換,「上下文」對象需要引用「狀態」對象才能觸發其行爲。狀態模式似乎使用循環引用。爲什麼那麼好?

這不是一個循環引用嗎?如果不是,它與循環引用有什麼關係?如果是這樣,爲什麼這可以接受?

http://en.wikipedia.org/wiki/State_pattern

http://sourcemaking.com/design_patterns/state

回答

4

兩個對象可以,而不一定參照彼此操作上彼此。通常情況下,循環引用是A類和B類都有一個成員變量引用另一個的情況。正如維基百科文章中所實現的那樣,沒有循環引用,因爲在上下文存儲對狀態的引用時,上下文作爲方法的參數傳遞到狀態,並且當方法在沒有狀態的情況下完成執行時,上下文超出範圍已經存儲了對它的引用。

+0

這也可以被認爲是依賴注入,對吧? – Brady 2012-07-22 16:20:30

+0

State類基本上被注入到Context中,儘管在一個更完整的例子中,Context類可能會有一個構造函數,它接受了任何接口狀態符合的參數。上下文對於國家來說並不是真正的DI,因爲State不依賴Context,State只是修改Context。 – cmsjr 2012-07-23 05:23:20

相關問題