設計模式之訪問者模式

2021-07-22 21:05:03 字數 1727 閱讀 9788

訪問者模式是一種物件行為型模式,,訪問者模式就是一種分離物件資料結構與行為的方法,通過這種分離,可達到為乙個被訪問者動態新增新的操作而無需做其它的修改的效果。

定義

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

使用場景

結構

實現

public

inte***ce

visitor

public

class

concretevisitor1

implements

visitor

public

void

visitconcreteelementb(concreteelementb elementb)

}public

class

concretevisitor2

implements

visitor

public

void

visitconcreteelementb(concreteelementb elementb)

}public

inte***ce

element

public

class

concreteelementa

implements

element

public

void

operationa()

}public

class

concreteelementb

implements

element

public

void

operationb()

}public

class

objectstruture else

}

return list;

}

}

測試

public

class

client

}

}

優點

符合單一職責原則:凡是適用訪問者模式的場景中,元素類中需要封裝在訪問者中的操作必定是與元素類本身關係不大且是易變的操作,使用訪問者模式一方面符合單一職責原則,另一方面,因為被封裝的操作通常來說都是易變的,所以當發生變化時,就可以在不改變元素類本身的前提下,實現對變化部分的擴充套件。

擴充套件性良好:元素類可以通過接受不同的訪問者來實現對不同操作的擴充套件。

缺點 增加新的元素模擬較困難。通過訪問者模式的**可以看到,在訪問者類中,每乙個元素類都有它對應的處理方法,也就是說,每增加乙個元素類都需要修改訪問者類(也包括訪問者類的子類或者實現類),修改起來相當麻煩。也就是說,在元素類數目不確定的情況下,應該慎用訪問者模式。所以,訪問者模式比較適用於對已有功能的重構,比如說,乙個專案的基本功能已經確定下來,元素類的資料已經基本確定下來不會變了,會變的只是這些元素內的相關操作,這時候,我們可以使用訪問者模式對原有的**進行重構一遍,這樣一來,就可以在不修改各個元素類的情況下,對原有功能進行修改。

設計模式之訪問者模式

先看一下下面這段 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 ...