[23種設(shè)計模式匯總]行為型模式_訪問者模式

[23種設(shè)計模式匯總]行為型模式_訪問者模式

ID:40313998

大?。?30.50 KB

頁數(shù):5頁

時間:2019-07-30

[23種設(shè)計模式匯總]行為型模式_訪問者模式_第1頁
[23種設(shè)計模式匯總]行為型模式_訪問者模式_第2頁
[23種設(shè)計模式匯總]行為型模式_訪問者模式_第3頁
[23種設(shè)計模式匯總]行為型模式_訪問者模式_第4頁
[23種設(shè)計模式匯總]行為型模式_訪問者模式_第5頁
資源描述:

《[23種設(shè)計模式匯總]行為型模式_訪問者模式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、訪問者模式一、訪問者模式簡介(BriefIntroduction)表示一個作用于某對象結(jié)構(gòu)中的元素操作。它使你可以在不改變各元素類的前提下定義作用于這些元素的新操作,它把數(shù)據(jù)結(jié)構(gòu)和作用于結(jié)構(gòu)上的操作之間的耦合性解脫開,使的操作結(jié)合可以相對自由地演化。優(yōu)點是增加新的操作很容易,因為增加一個新的操作就意味著增加一個新的訪問者,訪問者模式將有關(guān)的行為集中到一個訪問對象中。二、解決的問題(WhatToSolve)??????訪問者模式的目的是要把處理從數(shù)據(jù)結(jié)構(gòu)分離出來。如果系統(tǒng)有比較穩(wěn)定的數(shù)據(jù)結(jié)構(gòu),又有易于變化的算法的話,使用訪問者模式是個不錯的選擇,因

2、為訪問者模式使的算法操作的增加變的容易。相反,如果系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)不穩(wěn)定,易于變化,則此系統(tǒng)就不適合使用訪問者模式了。三、訪問者模式分析(Analysis)1、訪問者模式結(jié)構(gòu)Visitor:為對象結(jié)構(gòu)中Element的每一個子類聲明一個Visitor操作。ConcreteVisitor1、ConcreteVisitor2:具體的訪問者,實現(xiàn)父類Visitor的操作。每個操作實現(xiàn)算法的一部分,而該算法片段仍是對應(yīng)與結(jié)構(gòu)中對象的類。ObjectStructure:枚舉它的元素,可以提供一個高層的接口以允許訪問者訪問它的元素。Element:定義一個Ac

3、cept操作,它以一個訪問者為參數(shù)。ConcreteElementA、ConcreteElementB:具體元素,實現(xiàn)父類Element的方法Accept。2、源代碼1、訪問者抽象類VisitorpublicabstractclassVisitor{publicabstractvoidVisitConcreteElementA(ConcreteElementAconcreteElementA);publicabstractvoidVisitConcreteElementB(ConcreteElementBconcreteElementB);}2、

4、具體訪問者ConcreteVisitor1、ConcreteVisitor2publicclassConcreteVisitor1:Visitor{publicoverridevoidVisitConcreteElementA(ConcreteElementAconcreteElementA){Console.WriteLine("{0}訪問{1}",this.GetType().Name,concreteElementA.GetType().Name);}publicoverridevoidVisitConcreteElementB(Concr

5、eteElementBconcreteElementB){Console.WriteLine("{0}訪問{1}",this.GetType().Name,concreteElementB.GetType().Name);}}publicclassConcreteVisitor2:Visitor{publicoverridevoidVisitConcreteElementA(ConcreteElementAconcreteElementA){Console.WriteLine("{0}訪問{1}",this.GetType().Name,conc

6、reteElementA.GetType().Name);}publicoverridevoidVisitConcreteElementB(ConcreteElementBconcreteElementB){Console.WriteLine("{0}訪問{1}",this.GetType().Name,concreteElementB.GetType().Name);}3、定義一個Accept操作,它以一個訪問者為參數(shù)publicabstractclassElement{publicabstractvoidAccept(Visitorvisit

7、or);}4、具體元素ConcreteElementA、ConcreteElementBpublicclassConcreteElementA:Element{publicoverridevoidAccept(Visitorvisitor){visitor.VisitConcreteElementA(this);}publicvoidOperationA(){}}publicclassConcreteElementB:Element{publicoverridevoidAccept(Visitorvisitor){visitor.VisitCon

8、creteElementB(this);}publicvoidOperationB(){}}5、對象結(jié)構(gòu)ObjectStructurep

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。