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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

设计模式之访问者

發(fā)布時(shí)間:2023/12/4 asp.net 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 设计模式之访问者 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

訪問者模式介紹

訪問者模式能將算法與其所作用的對象隔離開來。

訪問者模式建議將新行為放入要給名為訪問者的獨(dú)立類中,而不是試圖將其整合到已有類中。

它允許你在不修改已有代碼的情況下向已有類層次結(jié)構(gòu)中增加新的行為。

需要執(zhí)行操作的原始對象將作為參數(shù)被傳遞給訪問者中的方法,讓方法能訪問對象所包含的一切必要數(shù)據(jù)。

簡單理解下什么是訪問者,這里使用保險(xiǎn)代理人拜訪不同層次的客戶時(shí)為例子。他會(huì)根據(jù)不同的客戶,推薦不同的保單。

  • 普通農(nóng)民工,推薦醫(yī)療保險(xiǎn)。

  • 普通打工人,推薦醫(yī)療保險(xiǎn)和財(cái)產(chǎn)保險(xiǎn)。

  • 企業(yè)家,推薦理財(cái)保險(xiǎn),年金等。

訪問者模式結(jié)構(gòu)

  • 訪問者接口

聲明一系列以對象結(jié)構(gòu)的具體元素為參數(shù)的訪問者方法。

  • 具體訪問者

會(huì)為不同的具體元素類實(shí)現(xiàn)相同行為的幾個(gè)不同版本。

  • 元素接口

聲明一個(gè)方法來接收訪問者。該方法必須有一個(gè)參數(shù)被聲明為訪問者接口類型。

  • 具體元素

實(shí)現(xiàn)元素接口方法,該方法的目的是根據(jù)當(dāng)前元素類將其調(diào)用重定向到相應(yīng)訪問者的方法(注意:即使基類實(shí)現(xiàn)了此方法,所有子類都必須對其進(jìn)行重寫并調(diào)用訪問者對象中的合適方法)。

  • 客戶端

作為集合或其他復(fù)雜對象的代表。

適合應(yīng)用場景

  • 需要對一個(gè)復(fù)雜對象結(jié)構(gòu)中所有元素執(zhí)行某些操作時(shí)。

  • 使用訪問者模式來清理輔助行為的業(yè)務(wù)邏輯時(shí)。

  • 當(dāng)某個(gè)行為只在類層次有意義,而在其他類中沒有意義時(shí)。

實(shí)現(xiàn)方式

1、在訪問者接口中聲明一組“訪問”方法,分別對應(yīng)程序中的每個(gè)具體元素類。

2、聲明元素接口,在具體原始類中實(shí)現(xiàn)接收方法。

3、元素類只能通過訪問者接口與訪問者進(jìn)行交互(訪問者必須知曉所有具體的元素類)。

4、為每個(gè)無法在元素層次結(jié)構(gòu)中實(shí)現(xiàn)的行為創(chuàng)建一個(gè)具體訪問者并實(shí)現(xiàn)所有的訪問者方法。

5、客戶端必須創(chuàng)建訪問者對象并通過“接收”方法將其傳遞給元素。

優(yōu)點(diǎn)

1、滿足開閉原則和單一職責(zé)原則。

2、訪問者對象可以在與各種對象交互時(shí)收集一些有用的信息。

缺點(diǎn)

1、每次在元素層次結(jié)構(gòu)中添加或移除一個(gè)類時(shí),你都要更新所有的訪問者。

2、在訪問者同某個(gè)元素進(jìn)行交互時(shí),它們可能沒有訪問元素私有成員變量和方法的必要權(quán)限。

Demo

元素接口與元素接口實(shí)現(xiàn)

元素接口與元素接口實(shí)現(xiàn)

訪問者接口與接口實(shí)現(xiàn)

訪問者接口與接口實(shí)現(xiàn)

客戶端代碼與Main()調(diào)用

客戶端代碼與Main()調(diào)用

訪問者模式在常規(guī)的編碼生活中很少會(huì)去使用,我們只需要掌握其原理就可以。對于在實(shí)際開發(fā)過程中,如果有滿足此模式的業(yè)務(wù),則可對其進(jìn)行分解,按照訪問者模式的結(jié)構(gòu)進(jìn)行構(gòu)建即可。

顯示結(jié)果

小寄語

人生短暫,我不想去追求自己看不見的,我只想抓住我能看的見的。

原創(chuàng)不易,給個(gè)關(guān)注。

我是阿輝,感謝您的閱讀,如果對你有幫助,麻煩點(diǎn)贊、轉(zhuǎn)發(fā) ?謝謝。

- END -

往期推薦

設(shè)計(jì)模式總覽

設(shè)計(jì)模式之簡單工廠

設(shè)計(jì)模式之抽象工廠

設(shè)計(jì)模式之建造者

設(shè)計(jì)模式之原型

設(shè)計(jì)模式之單例

設(shè)計(jì)模式之適配器

設(shè)計(jì)模式之橋接

設(shè)計(jì)模式之組合

設(shè)計(jì)模式之裝飾器

設(shè)計(jì)模式之外觀

設(shè)計(jì)模式之享元

設(shè)計(jì)模式之代理

設(shè)計(jì)模式之責(zé)任鏈

設(shè)計(jì)模式之命令

設(shè)計(jì)模式之迭代器

設(shè)計(jì)模式之中介者

設(shè)計(jì)模式之備忘錄

設(shè)計(jì)模式之觀察者

設(shè)計(jì)模式之狀態(tài)

設(shè)計(jì)模式之策略

設(shè)計(jì)模式之模板方法

總結(jié)

以上是生活随笔為你收集整理的设计模式之访问者的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。