設計模式 訪問者 穩定的資料結構 多變的演算法

2021-08-26 20:40:05 字數 1110 閱讀 5671

【緣起】

本週六的時候,本人進行了一場關於設計模式中訪問者的分享。

但是本人一緊張就說話語速略快,所以就想將自己分享的主要思想寫出來,以便將自己的想法分享給大家。

【參考資料】

程杰著  《大話設計模式》

《設計模式-可復用物件導向軟體的基礎》

【主要思想】

1  訪問者的特點: 穩定的資料結構和多變的演算法。

2  結構圖(uml類圖)

3   訪問的過程

step1 需求驅動

宣告演算法

如果我擁有了某個具體物件的訪問權(可以使用它的公共靜態屬性,公共動態方法)時,我在訪問該具體物件的時候,我會做什麼。即編寫visitconcreteelementa()  和visit concreteelementb()。

又因為訪問者的使用場景是穩定的資料結構,所以可以將資料物件都封裝在乙個物件結構objectstructure中。

當我們需要傳送對每個訪問物件的訪問權申請的時候,只需要將訪問申請傳送給物件結構。然後通過物件結構,遍歷結構中的被訪問物件,就能夠讓每個被訪問物件都通過accept(vistor visitor)對演算法(操作) 訪問者的訪問申請進行審核(識別訪問者的身份並判斷)。

step3 審核訪問權

通過accept(visitor visitor)將訪問者物件作為引數傳入,通過visitor.gettype().name (物件名) 公共靜態屬性的獲取,可以對不同的訪問者(申請呼叫該物件的具體操作類)設定不同的訪問許可權(可以呼叫和不可呼叫)。

step4 執行  呼叫物件實現演算法(具體操作)

如果該物件對訪問者設定的許可權是可以訪問,在允許訪問的方法體中就會呼叫具體的操作,也就是,一旦獲得了訪問權,就馬上實施權利。

以上就是在訪問者模式下,一次完整的訪問的流程。

4  面對修改封閉,面對擴充套件開放

該模式,新增演算法(作用在資料結構上的具體操作)容易,新寫乙個具體演算法類(寫乙份訪問申請書)即可。

新增物件,則需要修改多處,更需要新建演算法父類,違背了開閉原則 。

5  適用場景

一系列的操作中,具體操作用到的操作物件是乙個物件集合的子集,並且操作較複雜的時候,可以採用該設計模式,可以起到演算法和資料結構解耦的作用。

【感謝閱讀】

設計模式 訪問者

我們去銀行櫃檯辦業務,一般情況下會開幾個個人業務櫃檯的,你去其中任何乙個櫃檯辦理都是可以的。我們的訪問者模式可以很好付諸在這個場景中 對於銀行櫃檯來說,他們是不用變化的,就是說今天和明天提供個人業務的櫃檯是不需要有變化的。而我們作為訪問者,今天來銀行可能是取消費流水,明天來銀行可能是去辦理手機銀行業...

訪問者設計模式

訪問者設計模式 被訪問者 有一些穩定的結構物件,提供accept方法供訪問者進行訪問 訪問者 一些訪問者,有乙個visitor方法實現對物件的訪問,不同的物件會做出不同的反應!應用 公司年終獎考核 被訪問者有 程式設計師,產品經理 accept visitor 訪問者 ceo,cto visit c...

設計模式 訪問者模式

訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...