定義:表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。
訪問者模式角色介紹
訪問者模式屬於行為型模式,是設計模式中最難理解的模式。從定義可以看出結構物件是使用訪問者模式必備條件,而且這個結構物件必須存在遍歷自身各個物件的方法。每個人看待事情都不一樣,以學生成績來說,體育老師更關心學生的體育成績,而班主任關心學生的理論成績,這時訪問者模式派上用場了。
**示例
抽象訪問者
public
inte***ce visitor
抽象學生類
public
inte***ce student
具體訪問者類(班主任、體育老師)
public
class
headteacher
implements
visitor
}public
class
gymteacher
implements
visitor
}
具體學生類(小明、小紅)
public
class
xiaoming
implements
student
public
void
showsportsscore()
public
void
showtheoryscore()
}public
class
xiaohong
implements
student
public
void
showsportsscore()
public
void
showtheoryscore()
}
成績集合
public
class scoremanager
public listgetstudents()
}
客戶端
list
students = new scoremanager().getstudents();
// 班主任訪問學生成績
for (student s : students)
// 體育老師訪問學生成績
for (student s : students)
有人會問,怎麼跟uml圖不一樣啊。是的,我為了通用性,我把該實現的方法都提煉到父類,這樣visitor不用具體對應哪個元素類方法。上面的例子很明白看出其實就是每個訪問者所關心的地方不一樣。訪問者模式帶來的好處很明顯,擴充套件性強。正如《設計模式》的作者gof對訪問者模式的描述:大多數情況下,你並需要使用訪問者模式,但是當你一旦需要使用它時,那你就是真的需要它了。不足之處望指教。 設計模式之訪問者模式
先看一下下面這段 class person public string getaction public void setaction string action public void getconclusion else if action exciting else if action gri...
設計模式之訪問者模式
我們去銀行櫃檯辦業務,一般情況下會開幾個個人業務櫃檯的,你去其中任何乙個櫃檯辦理都是可以的。我們的訪問者模式可以很好付諸在這個場景中 對於銀行櫃檯來說,他們是不用變化的,就是說今天和明天提供個人業務的櫃檯是不需要有變化的。而我們作為訪問者,今天來銀行可能是取消費流水,明天來銀行可能是去辦理手機銀行業...
設計模式之訪問者模式
定義 表示一介作用於某個物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。結構圖 示例 public inte ce vistor public class concretevisitor1 implements vistor override public ...