操作複雜物件結構——訪問者模式(四)
26.4 訪問者模式與組合模式聯用
在訪問者模式中,包含一個用於儲存元素物件集合的物件結構,我們通常可以使用迭代器來遍歷物件結構,同時具體元素之間可以存在整體與部分關係,有些元素作為容器物件,有些元素作為成員物件,可以使用組合模式來組織元素。引入組合模式後的訪問者模式結構圖如圖26-4所示:
26.5 訪問者模式總結
由於訪問者模式的使用條件較為苛刻,本身結構也較為複雜,因此在實際應用中使用頻率不是特別高。當系統中存在一個較為複雜的物件結構,且不同訪問者對其所採取的操作也不相同時,可以考慮使用訪問者模式進行設計。在XML
1.主要優點
訪問者模式的主要優點如下:
(1) 增加新的訪問操作很方便。使用訪問者模式,增加新的訪問操作就意味著增加一個新的具體訪問者類,實現簡單,無須修改原始碼,符合“開閉原則”。
(2) 將有關元素物件的訪問行為集中到一個訪問者物件中,而不是分散在一個個的元素類中。類的職責更加清晰,有利於物件結構中元素物件的複用,相同的物件結構可以供多個不同的訪問者訪問。
(3) 讓使用者能夠在不修改現有元素類層次結構的情況下,定義作用於該層次結構的操作。
2.主要缺點
訪問者模式的主要缺點如下:
(1) 增加新的元素類很困難。在訪問者模式中,每增加一個新的元素類都意味著要在抽象訪問者角色中增加一個新的抽象操作,並在每一個具體訪問者類中增加相應的具體操作,這違背了“開閉原則”的要求。
(2) 破壞封裝。訪問者模式要求訪問者物件訪問並呼叫每一個元素物件的操作,這意味著元素物件有時候必須暴露一些自己的內部操作和內部狀態,否則無法供訪問者訪問。
3.適用場景
在以下情況下可以考慮使用訪問者模式:
(1) 一個物件結構包含多個型別的物件,希望對這些物件實施一些依賴其具體型別的操作。在訪問者中針對每一種具體的型別都提供了一個訪問操作,不同型別的物件可以有不同的訪問操作。
(2)
(3) 物件結構中物件對應的類很少改變,但經常需要在此物件結構上定義新的操作。
|