23種設計模式 訪問者模式

2021-10-09 16:21:40 字數 2427 閱讀 2628

在訪問者模式(visitor pattern)中,我們使用了乙個訪問者類,它改變了元素類的執行演算法。通過這種方式,元素的執行演算法可以隨著訪問者改變而改變。這種型別的設計模式屬於行為型模式。根據模式,元素物件已接受訪問者物件,這樣訪問者物件就可以處理元素物件上的操作。

意圖:主要將資料結構與資料操作分離。

主要解決:穩定的資料結構和易變的操作耦合問題。

如何解決:在被訪問的類裡面加乙個對外提供接待訪問者的介面。

關鍵**:在資料基礎類裡面有乙個方法接受訪問者,將自身引用傳入訪問者。

應用例項:您在朋友家做客,您是訪問者,朋友接受您的訪問,您通過朋友的描述,然後對朋友的描述做出乙個判斷,這就是訪問者模式。

優點: 1、符合單一職責原則。 2、優秀的擴充套件性。 3、靈活性。

缺點: 1、具體元素對訪問者公布細節,違反了迪公尺特原則。 2、具體元素變更比較困難。 3、違反了依賴倒置原則,依賴了具體類,沒有依賴抽象。

使用場景: 1、物件結構中物件對應的類很少改變,但經常需要在此物件結構上定義新的操作。 2、需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,而需要避免讓這些操作」汙染」這些物件的類,也不希望在增加新操作時修改這些類。

注意事項:訪問者可以對功能進行統一,可以做報表、ui、***與過濾器。

我們將建立乙個定義接受操作的 computerpart 介面。keyboard、mouse、monitor 和 computer 是實現了 computerpart 介面的實體類。我們將定義另乙個介面 computerpartvisitor,它定義了訪問者類的操作。computer 使用實體訪問者來執行相應的動作。

visitorpatterndemo,我們的演示類使用 computer、computerpartvisitor 類來演示訪問者模式的用法。

23種設計模式(9) 訪問者模式

定義 封裝某些作用於某種資料結構中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。型別 行為類模式 類圖 訪問者模式可能是行為類模式中最複雜的一種模式了,但是這不能成為我們不去掌握它的理由。我們首先來看乙個簡單的例子,如下 class a public void metho...

23種設計模式(16) 訪問者模式

定義 封裝某些作用於某種資料結構中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。型別 行為類模式 類圖 訪問者模式可能是行為類模式中最複雜的一種模式了,但是這不能成為我們不去掌握它的理由。我們首先來看乙個簡單的例子,如下 class a public void metho...

設計模式(23) 訪問者模式

訪問者模式,用來解決多個訪問者訪問多個不同元素的問題。訪問者模式引入了訪問者角色和被訪問者角色,不同訪問者訪問元素的方式不同。公司員工分為全職員工和兼職員工 這裡員工就是被訪問者 公司有財務部結算工資,人力資源部計算工作時長 這裡財務部和人力資源部為訪問者 於是就有了不同訪問者訪問不同被訪問者的情況...