日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

基于设计模式的学习之旅-----访问者模式(附源码)

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于设计模式的学习之旅-----访问者模式(附源码) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

          基于設計模式的學習之旅-----訪問者模式

1初始訪問者模式

2什么是訪問者模式

表示一個作用于某對象結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用于這些元素的新操作。

3模式結構圖

4、模式代碼事例

場景:年會,每個小組表演節目

41涉及到的類,以及類圖

ITeam、IVisitor、CompanyObjectStructure、StudioTeam、ServerTeam、AnnualVisitor

42具體的代碼實現

使用訪問者模式:

ITeam

StudioTeam

IVisitor

AnnualVisitor

CompanyObjectStructure

PatternRun

?

非訪問者模式實現:

AnnualCompany

NoPatternRun

43事例輸出結果

5、模式參與者

Vi?s?i?t?o?r(訪問者,如IVisitor

C?o?n?c?r?e?t?e?Vi?s?i?t?o?r(具體訪問者,如AnnualVisitor、MidAutumnVisitor

E?l?e?m?e?n?t(元素,如ITeam

C?o?n?c?r?e?t?e?E?l?e?m?e?n?t(具體元素,如ServerTeam?)

O?b?j?e?c?t?S?t?r?u?c?t?u?r?e(對象結構,如CompanyObjectStructure

6模式優缺點

A訪問者模式使得易于增加新的操作。?訪問者使得增加依賴于復雜對象結構的構件的操作變得容易了。僅需增加一個新的訪問者即可在一個對象結構上定義一個新的操作。相反,如果每個功能都分散在多個類之上的話,定義新的操作時必須修改每一類。

B訪問者集中相關的操作而分離無關的操作。相關的行為不是分布在定義該對象結構的各個類上,而是集中在一個訪問者中。無關行為卻被分別放在它們各自的訪問者子類中。這就既簡化了這些元素的類,也簡化了在這些訪問者中定義的算法。所有與它的算法相關的數據結構都可以被隱藏在訪問者中。

C增加新的C?o?n?c?r?e?t?e?E?l?e?m?e?n?t類很困難。Vi?s?i?t?o?r模式使得難以增加新的E?l?e?m?e?n?t的子類。每添加一個新的?C?o?n?c?r?e?t?e?E?l?e?m?e?n?t都要在?Vi?s?t?o?r中添加一個新的抽象操作,并在每一個C?o?n?c?r?e?t?Vi?s?i?t?o?r類中實現相應的操作。

D通過類層次進行訪問。一個迭代器(參見I?t?e?r?a?t?o?r5?.?4)?)可以通過調用節點對象的特定操作來遍歷整個對象結構,同時訪問這些對象。但是迭代器不能對具有不同元素類型的對象結構進行操作

E累積狀態。當訪問者訪問對象結構中的每一個元素時,它可能會累積狀態。

F破壞封裝。訪問者方法假定C?o?n?c?r?e?t?e?E?l?e?m?e?n?t接口的功能足夠強,足以讓訪問者進行它們的工作。結果是,該模式常常迫使你提供訪問元素內部狀態的公共操作,這可能會破壞它的封裝性

7模式適用性

A一個對象結構包含很多類對象,它們有不同的接口,而你想對這些對象實施一些依賴于其具體類的操作。

B需要對一個對象結構中的對象進行很多不同的并且不相關的操作,而你想避免讓這些操作“污染”這些對象的類。?Vi?s?i?t?o?r使得你可以將相關的操作集中起來定義在一個類中。當該對象結構被很多應用共享時,用Vi?s?i?t?o?r模式讓每個應用僅包含需要用到的操作。

C定義對象結構的類很少改變,但經常需要在此結構上定義新的操作。改變對象結構類需要重定義對所有訪問者的接口,這可能需要很大的代價。如果對象結構類經常改變,那么可能還是在這些類中定義這些操作較好。

?

點擊下載“文檔以及源碼下載”

?

歡迎轉載,請注明出處“http://www.cnblogs.com/luxiaofeng54/archive/2013/04/13/3019434.html”

?

?

?

轉載于:https://www.cnblogs.com/luxiaofeng54/archive/2013/04/13/3019434.html

總結

以上是生活随笔為你收集整理的基于设计模式的学习之旅-----访问者模式(附源码)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。