天天看點

設計模式24——行為型模式之訪問者模式

定義:訪問者模式(Vistor Pattern),表示一個作用于對象結構中各元素的操作。它使你能夠在不改變各元素的類的前提下定義作用于這些元素的新操作。

類型:對象行為型模式。

概述:

         訪問者模式适用的場合比較狹窄。由于它的要求很嚴。

ConcreteElement要求具有一樣的算法接口,而且ConcreteVisitor也要求一樣的接口。這兩點就使得訪問者模式的使用範圍比較窄。在《Head First Design Patterns》中也将訪問者模式列為很常使用模式之中的一個。

          舉一個樣例,有一個倉庫(對象結構)。裡面儲存不同的電器(元素)。如電視、電腦(詳細元素),倉庫能夠按電器新舊或大小(詳細的訪問者)來擺放電器産品。

類圖:

設計模式24——行為型模式之訪問者模式

參與者:

Client:建構抽象的訪問者以及結構體對象。

Storage。詳細生成并存儲不同的商品(如Television、Computer)。

Goods。抽象商品類。

Television、Computer,詳細的商品類,對對應的屬性完畢指派。

Place,抽象的訪問者類。提供抽象訪問方法。

State、Size。詳細的訪問者類,依據對應商品屬性來實作詳細的擺放方法Put()。

示範樣例代碼:

适用性:

一個對象結構包括非常多類對象。它們有不同的接口。而你想對這些對象實施一些依賴于其詳細類的操作。

須要對一個對象結構中的對象進行非常多不同的而且不相關的操作,而你想避免讓這些操作“污染”這些對象的類。

 Visitor使得你能夠将相關的操作集中起來定義在一個類中。

 當該對象結構被非常多應用共享時,用Visitor模式讓每一個應用僅包括須要用到的操作。

定義對象結構的類非常少改變,但常常須要在此結構上定義新的操作。

 改變對象結構類須要重定義對全部訪問者的接口,這可能須要非常大的代價。

 假設對象結構類常常改變,那麼可能還是在這些類中定義這些操作較好                

優缺點:

長處,完畢新的模闆方法是不用改動原有代碼,通過加入新代碼完畢。

缺點,當使用訪問者模式時,打破了組合模式。

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5420317.html,如需轉載請自行聯系原作者  

繼續閱讀