聲明:本系列部落格參考資料《大話設計模式》,作者程傑。
通路者模式表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用于這些元素的新操作。
UML類圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9cXT4VERNhHatFmdRhlW1VTaitmTzkVdjJjYzpkMMZ3bENGMShUYvwFd4VGdvwlMvw1ayFWbyVGdhd3P5MDMzUzNwATMxEjNwUTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
角色:
1.抽象通路者(State):為該對象結構中具體元素角色聲明一個通路操作接口。該操作接口的名字和參數辨別了發送通路請求給具體通路者的具體元素角色,這樣通路者就可以通過該元素角色的特定接口直接通路它。
2.具體通路者(Success):實作通路者聲明的接口。
3.抽象元素(Person):定義一個接受通路操作accept(),它以一個通路者作為參數。
4. 具體元素(Man):實作了抽象元素所定義的接受操作接口。
5.結構對象(ObjectStruct):這是使用通路者模式必備的角色。它具備以下特性:能枚舉它的元素;可以提供一個高層接口以允許通路者通路它的元素;如有需要,可以設計成一個複合對象或者一個聚集(如一個清單或無序集合)。
核心代碼:
測試用戶端代碼:
适用場景及優勢:
1) 一個對象結構包含很多類對象,它們有不同的接口,而你想對這些對象實施一些依賴于其具體類的操作。
2) 需要對一個對象結構中的對象進行很多不同的并且不相關的操作,而你想避免讓這些操作“污染”這些對象的類。Visitor模式使得你可以将相關的操作集中起來定義在一個類中。
3) 當該對象結構被很多應用共享時,用Visitor模式讓每個應用僅包含需要用到的操作。
4) 定義對象結構的類很少改變,但經常需要在此結構上定義新的操作。改變對象結構類需要重定義對所有通路者的接口,這可能需要很大的代價。如果對象結構類經常改變,那麼可能還是在這些類中定義這些操作較好。
歡迎關注我的視訊課程,位址如下,謝謝。
<a target="_blank" href="http://edu.csdn.net/course/detail/602"> PHP面向對象設計模式</a>