設計模式之
visitor
——送禮篇
今年過年不收禮,收禮只收腦白金。聽到這暗示性的廣告詞,我的腦袋突然一亮。因為最近因為要辦某事,必須要給單位的領導要表示一下。到底送什麼,還真讓人頭痛,還好有腦白金,奶奶的。。。,腐敗啊,罪過!
首先要對送禮的物件進行分析,單位有兩個領導,一正,一副。因此給不同的領導送的禮也是不同的(哈,收入要和產出成正比嗎),好了言歸正傳。
1、在這裡,先把領導定義成乙個介面類:
public inte***ce leader
在把拜訪者定義成另乙個介面類:
public inte***ce visitor
2、下面我們要對這兩個介面進行實現:
a:一把手
public class firsthand implements leader
public string getpresent()
//定義
backinfo
的具體內容
這裡是很簡單的一句呼叫
public void backinfo(visitor visitor) }b
:二把手
public class secondhand implements leader
public string getpresent()
//定義
backinfo
的具體內容
這裡是很簡單的一句呼叫
public void backinfo(visitor visitor) }c
:拜訪人(我)
public class visitme implements visitor
}public void visitfirsthand (firsthand first)
public void visitsecondhand (secondhand second) }3
、編寫測試類:
public class test
4、說明:a:
**只用來學習
visitor模式,
要執行的話,必須要做一點改動。b:
firsthand
,secondhand
只是乙個個具體實現,實際上還可以拓展為更多的實現,整個核心奧妙在
backinfo
方法中,在遍歷
collection
時,通過相應的
accept
方法呼叫具體型別的被訪問者。這一步確定了被訪問者型別
c:使用訪問者模式是物件群結構中
(collection)
中的物件型別很少改變,也就是說領導很少變化。
5、特別感謝:
感謝kvill 網友的所提的意見,為了更好的說明問題,我將例子進行了改動。另外要說明的是:本文是站在我(visitor)立場上來看問題,因此我關心的是事情所辦的情況(也就是領導所給我的答覆)。你已經給領導分別送去禮物了(領導初始化時),然後你再去一一拜訪領導,領導答覆你已經收到某某禮物了,事情辦的如何等等。 如果是站在領導的立場,他關心的可就是索賄的問題(哈哈,不過也可以考慮如果是這樣的話,如何實現)。
設計模式之Visitor 送禮篇
今年過年不收禮,收禮只收腦白金。聽到這暗示性的廣告詞,我的腦袋突然一亮。因為最近因為要辦某事,必須要給單位的領導要表示一下。到底送什麼,還真讓人頭痛,還好有腦白金,奶奶的。腐敗啊,罪過!首先要對送禮的物件進行分析,單位有兩個領導,一正,一副。因此給不同的領導送的禮也是不同的 哈,收入要和產出成正比嗎...
設計模式之Visitor模式(筆記)
訪問者模式 表示乙個作用於某個物件結構中的各元素操作。它使你能夠不改變各元素的類的前提下定義作用於這些元素的新操作。首先定義乙個visitor抽象類,為每乙個詳細類宣告乙個visit操作 public abstract class visitor 接著定義繼承visitor的詳細類 public c...
Visitor設計模式
物件導向系統的開發和設計過程,經常會遇到一種情況就是需求變更 requirement changing 經常做好的乙個設計 實現了乙個系統原型,客戶又會有了新的需求。因此不得不去修改已有的設計,最常見就是解決方案就是給已經設計 實現好的類新增新的方法去實現客戶新的需求,這樣就陷入了設計變更的夢魘 不...