訪問者模式把資料結構和作用於結構上的操作解耦合,使得操作集合可相對自由地演化。訪問者模式適用於資料結構相對穩定演算法又易變化的系統。因為訪問者模式使得演算法操作增加變得容易。若系統資料結構物件易於變化,經常有新的資料物件增加進來,則不適合使用訪問者模式。訪問者模式的優點是增加操作很容易,因為增加操作意味著增加新的訪問者。訪問者模式將有關行為集中到乙個訪問者物件中,其改變不影響系統資料結構。其缺點就是增加新的資料結構很困難。—— from 百科
簡單來說,訪問者模式就是一種分離物件資料結構與行為的方法,通過這種分離,可達到為乙個被訪問者動態新增新的操作而無需做其它的修改的效果。簡單關係圖:
來看看原碼:乙個visitor類,存放要訪問的物件,
public
inte***ce
visitor
public
class
myvisitor
implements
visitor
}
subject類,accept方法,接受將要訪問它的物件,getsubject()獲取將要被訪問的屬性,
public
inte***ce
subject
public
class
mysubject
implements
subject
@override
public string getsubject()
}
測試:
public
class
test
}
輸出:
visit the subject:love
該模式適用場景:如果我們想為乙個現有的類增加新功能,不得不考慮幾個事情:
新功能會不會與現有功能出現相容性問題?
以後會不會再需要新增?
如果類不允許修改**怎麼辦?
面對這些問題,最好的解決方法就是使用訪問者模式,訪問者模式適用於資料結構相對穩定的系統,把資料結構和演算法解耦,
設計模式 21 訪問者模式(Visitor)
21 訪問者模式 visitor 訪問者模式把資料結構和作用於結構上的操作解耦合,使得對資料操作可相對自由地演化。訪問者模式適用於資料結構相對穩定,演算法又易變化的系統。因為訪問者模式使得演算法操作增加變得容易。若系統資料結構物件易於變化,經常有新的資料物件增加進來,則不適合使用訪問者模式。訪問者模...
Visitor(訪問者模式)
名 稱 visitor 訪問者模式 意 圖 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。適 用 環 境 u 乙個物件結構包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作。u 需要對乙個物件結構中的物件進行很多...
訪問者模式(Visitor)
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。他使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。訪問者模式適用於資料結構相對穩定的系統。他把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由地演化。訪問者模式的目的是要把處理從資料結構分離出來...