1. 程式人生 > >大戰設計模式【24】—— 訪問者模式

大戰設計模式【24】—— 訪問者模式

對象的訪問 定義 www 否則 title blog .cn 比較 design

訪問者模式(Visitor)

設計模式使用的例子https://github.com/LinkinStars/DesignPatternsAllExample

一、定義

提供一個作用於某對象結構中的各元素的操作表示,它使得可以在不改變各元素的類的前提下定義作用於這些元素的新操作。 

二、結構

Visitor(抽象訪問者):抽象訪問者為對象結構中每一個具體元素類ConcreteElement聲明一個訪問操作,

從這個操作的名稱或參數類型可以清楚知道需要訪問的具體元素的類型,具體訪問者則需要實現這些操作方法,定義對這些元素的訪問操作。

ConcreteVisitor(具體訪問者):具體訪問者實現了抽象訪問者聲明的方法,每一個操作作用於訪問對象結構中一種類型的元素。

Element(抽象元素):一般是一個抽象類或接口,定義一個Accept方法,該方法通常以一個抽象訪問者作為參數。

ConcreteElement(具體元素):具體元素實現了Accept方法,在Accept方法中調用訪問者的訪問方法以便完成一個元素的操作。

ObjectStructure(對象結構):對象結構是一個元素的集合,用於存放元素對象,且提供便利其內部元素的方法。

三、優點

增加新的訪問操作十分方便

將有關元素對象的訪問行為集中到一個訪問者對象中,而不是分散在一個個的元素類中,類的職責更加清晰

四、缺點

增加新的元素類很困難,需要在每一個訪問者類中增加相應訪問操作代碼

元素對象有時候必須暴露一些自己的內部操作和狀態,否則無法供訪問者訪問

五、應用場景

一個對象結構包含多個類型的對象,希望對這些對象實施一些依賴其具體類型的操作,不同的類型可以有不同的訪問操作

對象結構中對象對應的類很少改變,但經常需要在此對象結構上定義新的操作

六、個人總結

1、訪問者模式主要的作用在於對一類元素對象增加新的一個同類型的訪問操作

2、在使用這個模式的時候一定要註意的是,一定要確保兌現給自己內部的操作和狀態一定不能經常改變

3、對於訪問者來說,所做的操作是在一起的,所以維護起來會容易,但同時也就打破了組合的封裝

4、例子相對簡單,比較抽象,主要體會的意思是,當一個訪問者來的時候,如果需要新的方法去獲取具體類的屬性

則只需要在訪問者中進行修改就可以了

參考博客:http://www.cnblogs.com/edisonchou/p/7247990.html

大戰設計模式【24】—— 訪問者模式