【緣起】
本週六的時候,本人進行了一場關於設計模式中訪問者的分享。
但是本人一緊張就說話語速略快,所以就想將自己分享的主要思想寫出來,以便將自己的想法分享給大家。
【參考資料】
程杰著 《大話設計模式》
《設計模式-可復用物件導向軟體的基礎》
【主要思想】
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方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...