設計模式之訪問者模式

2021-07-30 22:06:35 字數 1660 閱讀 6708

定義:表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。

訪問者模式角色介紹

訪問者模式屬於行為型模式,是設計模式中最難理解的模式。從定義可以看出結構物件是使用訪問者模式必備條件,而且這個結構物件必須存在遍歷自身各個物件的方法。每個人看待事情都不一樣,以學生成績來說,體育老師更關心學生的體育成績,而班主任關心學生的理論成績,這時訪問者模式派上用場了。

**示例

抽象訪問者

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 ...