設計模式 訪問者模式

2021-09-25 07:12:34 字數 2140 閱讀 5689

一. 概述

訪問者模式(visitor pattern),封裝一些作用於某種資料結構的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。

主要將資料結構與資料操作分離,解決 資料結構和操作耦合性問題

訪問者模式的基本工作原理是:在被訪問的類裡面加乙個對外提供接待訪問者的介面

訪問者模式主要應用場景是:需要對乙個物件結構中的物件進行很多不同操作

(這些操作彼此沒有關聯),同時需要避免讓這些操作"汙染"這些物件的類,可以選用訪問者模式解決。

visitor 是抽象訪問者,為該物件結構中的concreteelement的每乙個類宣告乙個visit操作

concretevisitor :是乙個具體的訪問者,實現每個visitor 宣告的操作,是每個操作實現的部分.

objectstructure 能列舉它的元素, 可以提供乙個高層的介面,用來允許訪問者訪問元素

element 定義乙個accept 方法,接收乙個訪問者物件

concreteelement 為具體元素,實現了accept 方法

二. 場景示例

public

abstract

class

action

public

class

success

extends

action

@override

public

void

getwomanresult

(woman woman)

}public

class

fail

extends

action

@override

public

void

getwomanresult

(woman woman)

}public

class

wait

extends

action

@override

public

void

getwomanresult

(woman woman)

}

public

abstract

class

person

public

class

manextends

person

}//說明

//1. 這裡我們使用到了雙分派, 即首先在客戶端程式中,將具體狀態作為引數傳遞woman中(第一次分派)

//2. 然後woman 類呼叫作為引數的 "具體方法" 中方法getwomanresult, 同時將自己(this)作為引數

// 傳入,完成第二次的分派

public

class

woman

extends

person

}

//資料結構,管理很多人(man , woman)

public

class

objectstructure

//移除

public

void

detach

(person p)

//顯示測評情況

public

void

display

(action action)

}}

public

class

client

}

三. 訪問者模式的注意事項和細節

訪問者模式符合單一職責原則、讓程式具有優秀的擴充套件性、靈活性非常高

訪問者模式可以對功能進行統一,可以做報表、ui、***與過濾器,適用於資料結構相對穩定的系統

具體元素對訪問者公布細節,也就是說訪問者關注了其他類的內部細節,這是迪公尺特法則所不建議的, 這樣造成了具體元素變更比較困難。

違背了依賴倒轉原則。訪問者依賴的是具體元素,而不是抽象元素

因此,如果乙個系統有比較穩定的資料結構,又有經常變化的功能需求,那麼訪問者模式就是比較合適的.

設計模式 訪問者模式

訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...

設計模式 訪問者模式

訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...

設計模式 訪問者模式

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