一. 訪問者模式
定義:表示一個作用於某對象結構中的各元素的操作。它你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
結構如下:
二. 舉例
假設有一項科學實驗,是用來對比兩種種子在不同環境下的生長情況。
兩種種子,一種是普通的種子(Seed_A),一種是太空運回的種子(Seed_B)。
生長環境,分別是在多雨環境下(Rain_Status),陽光環境下(Sun_Status)等等。
結構如下:
代碼如下:
[cpp] view plaincopy
三. 說明
1. 首先有一點要明確,就是兩種種子不會輕易改變,也就是只有普通和太空種子兩種。換句話說就是,數據結構比較穩定。
2. 可以變的是新增的狀態,比如增加一個X光下的生成情況,等等。說白了就是,操作集合可以相對自由的演化。
3. 這種結構的優點是,增加新的操作很容易;缺點是,增加新的數據結構有點困難,因為你要在每一個訪問者裡都添加相應的操作。
4. 種子生長圖相對於訪問者模式的結構圖有如下關系:
seed(種子)相當於 element(元素),這個是不怎麼變的。
status(狀態) 相當於 visitor(訪問者),這個是可變且易變的。要注意的是,每個訪問者都要對所有的元素(element)進行操作。
5. 事實上我們很少用這種模式,因為數據結構(element)不變的情況很少。