操作複雜物件結構——訪問者模式(四)
26.4 訪問者模式與組合模式聯用
在訪問者模式中,包含一個用於儲存元素物件集合的物件結構,我們通常可以使用迭代器來遍歷物件結構,同時具體元素之間可以存在整體與部分關係,有些元素作為容器物件,有些元素作為成員物件,可以使用組合模式來組織元素。引入組合模式後的訪問者模式結構圖如圖26-4所示:
26.5 訪問者模式總結
由於訪問者模式的使用條件較為苛刻,本身結構也較為複雜,因此在實際應用中使用頻率不是特別高。當系統中存在一個較為複雜的物件結構,且不同訪問者對其所採取的操作也不相同時,可以考慮使用訪問者模式進行設計。在XML文件解析、編譯器的設計、複雜集合物件的處理等領域訪問者模式得到了一定的應用。
1.主要優點
訪問者模式的主要優點如下:
(1) 增加新的訪問操作很方便。使用訪問者模式,增加新的訪問操作就意味著增加一個新的具體訪問者類,實現簡單,無須修改原始碼,符合“開閉原則”。
(2) 將有關元素物件的訪問行為集中到一個訪問者物件中,而不是分散在一個個的元素類中。類的職責更加清晰,有利於物件結構中元素物件的複用,相同的物件結構可以供多個不同的訪問者訪問。
(3) 讓使用者能夠在不修改現有元素類層次結構的情況下,定義作用於該層次結構的操作。
2.主要缺點
訪問者模式的主要缺點如下:
(1) 增加新的元素類很困難。在訪問者模式中,每增加一個新的元素類都意味著要在抽象訪問者角色中增加一個新的抽象操作,並在每一個具體訪問者類中增加相應的具體操作,這違背了“開閉原則”的要求。
(2) 破壞封裝。訪問者模式要求訪問者物件訪問並呼叫每一個元素物件的操作,這意味著元素物件有時候必須暴露一些自己的內部操作和內部狀態,否則無法供訪問者訪問。
3.適用場景
在以下情況下可以考慮使用訪問者模式:
(1) 一個物件結構包含多個型別的物件,希望對這些物件實施一些依賴其具體型別的操作。在訪問者中針對每一種具體的型別都提供了一個訪問操作,不同型別的物件可以有不同的訪問操作。
(2) 需要對一個物件結構中的物件進行很多不同的並且不相關的操作,而需要避免讓這些操作“汙染”這些物件的類,也不希望在增加新操作時修改這些類。訪問者模式使得我們可以將相關的訪問操作集中起來定義在訪問者類中,物件結構可以被多個不同的訪問者類所使用,將物件本身與物件的訪問操作分離。
(3) 物件結構中物件對應的類很少改變,但經常需要在此物件結構上定義新的操作。
|
【作者:劉偉 http://blog.csdn.net/lovelion】
相關文章
- 如何使用建造者模式構造複雜物件?模式物件
- 極簡架構模式-資料訪問物件模式架構模式物件
- 物件解構與點操作訪問究竟誰快物件
- 訪問者模式模式
- 設計模式系列之建造者模式(Builder Pattern)——複雜物件的組裝與建立設計模式UI物件
- 行為模式-訪問者模式模式
- JVM裡物件的佈局和結構和訪問JVM物件
- python-訪問者模式Python模式
- 設計模式(十六)——訪問者模式設計模式
- 極簡設計模式-訪問者模式設計模式
- 自學 資料結構四月二十一日_時間複雜度&空間複雜度資料結構時間複雜度
- DesignPattern_訪問者模式_19模式
- 深入淺出訪問者模式模式
- 複雜網路作業五:第四題——Structural Role 結構角色:ROIXStruct
- 資料結構:時間複雜度資料結構時間複雜度
- 前端資料結構---複雜度分析前端資料結構複雜度
- 一、訪問物件屬性和方法的操作物件
- 【趣味設計模式系列】之【訪問者模式】設計模式
- 設計模式 - ASM 中的訪問者模式設計模式ASM
- 設計模式學習之訪問者模式設計模式
- C#設計模式之訪問者模式C#設計模式
- 代理模式-訪問物件的代理而非其本身模式物件
- 複雜的資料結構設計求解?資料結構
- Python3 解析複雜結構的 jsonPythonJSON
- 15.java設計模式之訪問者模式Java設計模式
- 設計模式(二十三)訪問者設計模式
- PHP設計模式-DAO (Data Access Objects) 資料訪問物件模式PHP設計模式Object物件
- Java進階篇設計模式之十 ---- 訪問者模式和中介者模式Java設計模式
- 深入理解建造者模式 ——組裝複雜的例項模式
- 物件導向-設計模式-結構型物件設計模式
- 設計模式系列之代理模式(Proxy Pattern)——物件的間接訪問設計模式物件
- 重構複雜條件的規則設計模式 - levelup設計模式
- 複雜連結串列的複製
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 設計模式學習-使用go實現訪問者模式設計模式Go
- 「補課」進行時:設計模式(18)——訪問者模式設計模式
- 架構雜談《四》架構
- 資料結構複雜圖形儲存 PHP 版資料結構PHP
- 資料結構與演算法——複雜度分析資料結構演算法複雜度