Visitor(访问者)--对象行为型模式
Visitor(訪問者)–對象行為型模式
一、意圖
表示一個作用于某個對象結(jié)構(gòu)中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。
二、動機
1.在軟件構(gòu)建過程中,由于需求的改變,某些類層次結(jié)構(gòu)中常常需要增加新的行為(方法),如果直接在基類中做這樣的更改,將會給子類帶來繁重的變更負(fù)擔(dān),甚至破壞原有設(shè)計。
2.如何在不更改類層次結(jié)構(gòu)的前提下,在運行時根據(jù)需要透明地為類層次結(jié)構(gòu)上的各個類動態(tài)添加新的操作,從而避免上述問題?
三、適用性
1.一個對象結(jié)構(gòu)包含很多類對象,他們有不同的接口,而你想對這些對象實施一些依賴于其具體類的操作。
2.需要對一個對象結(jié)構(gòu)中的對象進(jìn)行很多不同的并且不想關(guān)的操作,而你想避免讓這些操作“污染”這些對象的類。Visitor使得你可以將相關(guān)的操作集中起來定義在一個類中。當(dāng)該對象結(jié)構(gòu)被很多應(yīng)用共享時,用Visitor模式上每個應(yīng)用僅包含需要用到的操作。
3.定義對象結(jié)構(gòu)的類很少改變,但經(jīng)常需要在此結(jié)構(gòu)上定義新的操作。改變對象結(jié)構(gòu)類需要重定義對所有訪問者的接口,這可能需要很大的代價。如果對象結(jié)構(gòu)類經(jīng)常改變,那么可能還是在這些類中定義這些操作較好。
三、結(jié)構(gòu)
五、效果
1.訪問者模式使得易于增加新的操作。
2.訪問者集中相關(guān)的操作而分離無關(guān)的操作。
3.增加新的ConcreteElement類很困難。
4.通過類層次進(jìn)行訪問。
5.累積狀態(tài)。
6.破壞封裝。
六、實現(xiàn)
1.雙分派(Double-dispatch)。
2.誰負(fù)責(zé)遍歷對象結(jié)構(gòu)。
七、要點總結(jié)
1.Visitor模式通過所謂雙重分發(fā)(double-dispatch)來實現(xiàn)在不更改(不添加新的操作-編譯時),Element類層次結(jié)構(gòu)的前提下,在運行時透明地為類層次結(jié)構(gòu)上的各個類動態(tài)添加新的操作(支持變化)。
2.所謂雙重分發(fā),即Visitor模式中間包括了兩個多態(tài)分發(fā)(注意其中的多態(tài)機制):第一個為accept方法的多態(tài)辨析;第二個為visitElementX方法的多態(tài)辨析。
3.Visitor模式的最大缺點在于擴展類層次結(jié)構(gòu)(增添新的Element子類),會導(dǎo)致Visitor類的改變。因此Visitor模式適用于“Element類層次結(jié)構(gòu)穩(wěn)定,而其中的操作卻經(jīng)常面臨頻繁改動”。
八、相關(guān)模式
Composit:訪問者可以用于對一個由Composite模式定義的對象結(jié)構(gòu)進(jìn)行操作。
Interpreter:訪問者可以用于解釋器。
九、舉例說明
不同的質(zhì)檢員分別抽樣調(diào)查每個分廠的產(chǎn)品。
本文為李建忠設(shè)計模式視頻的筆記以及《設(shè)計模式-可復(fù)用面向?qū)ο蟮能浖幕A(chǔ)》和自己的部分見解
總結(jié)
以上是生活随笔為你收集整理的Visitor(访问者)--对象行为型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 纪念碑谷通关攻略(第六章迷宫)
- 下一篇: 怎么把中文文件夹名翻译成日语中文名怎么转