23設計模式之訪問者模式 Visitor

2021-09-30 12:37:35 字數 2771 閱讀 7816

返回首頁

visitor屬於行為型模式中的一種,表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

1. 乙個物件結構包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作。

2. 需要對乙個物件結構中的物件進行很多不同的並且不相關的操作,而你想避免讓這些操作「汙染」這些物件的類。visitor使得你可以將相關的操作集中起來定義在乙個

類中。當該物件結構被很多應用共享時,用visitor模式讓每個應用僅包含需要用到的操作。

3. 定義物件結構的類很少改變,但經常需要在此結構上定義新的操作。改變物件結構類需要重定義對所有訪問者的介面,這可能需要很大的代價。如果物件結構類經常改

變,那麼可能還是在這些類中定義這些操作較好。

1. visitor:為該物件結構中concreteelement的每乙個類宣告乙個visit操作。該操作的名字和特徵標識了傳送visit請求給該訪問者的那個類。這使得訪問者可以確定正被

訪問元素的具體的類。這樣訪問者就可以通過該元素的特定介面直接訪問它。

2. concretevisitor:實現每個由visitor宣告的操作。每個操作實現本演算法的一部分,而該演算法片斷乃是對應於結構中物件的類。concretevisitor為該演算法提供了上下文

並儲存它的區域性狀態。這一狀態常常在遍歷該結構的過程中累積結果。

3. element:定義乙個accept操作,它以乙個訪問者為引數。

4. concreteelement:實現accept操作,該操作以乙個訪問者為引數。

5. objectstructure:能列舉它的元素。:可以提供乙個高層的介面以允許該訪問者訪問它的元素。可以是乙個復合或是乙個集合,如乙個列表或乙個無序集合。

// 23設計模式

//// created by 陽君 on 14/12/5.

//import foundation

/// visitor為該物件結構中concreteelement的每乙個類宣告乙個visit操作

protocol visitor

concretevisitor.swift

//

// concretevisitor.swift

// 23設計模式

//// created by 陽君 on 14/12/5.

//import foundation

/// concretevisitor實現每個由visitor宣告的操作

class concretevisitor: visitor

func visitstring(stringe: stringelement)

func visitcollection(collection: array) }}

visitable.swift

//

// visitable.swift

// 23設計模式

//// created by 陽君 on 14/12/5.

//import foundation

/// visitable定義乙個accept操作,它以乙個訪問者為引數。

protocol visitable

a) floatelement.swift

//

// floatelement.swift

// 23設計模式

//// created by 陽君 on 14/12/5.

//import foundation

/// floatelement實現visitor操作,該操作以乙個訪問者為引數

class floatelement: visitable

func accept(visitor: visitor)

}

b) stringelement.swift

//

// stringelement.swift

// 23設計模式

//// created by 陽君 on 14/12/5.

//import foundation

/// stringelement實現visitor操作,該操作以乙個訪問者為引數

class stringelement: visitable

func accept(visitor: visitor)

}

// 訪問者模式

let visitor = concretevisitor()

let se = stringelement(se: "abc")

se.accept(visitor)

let fe = floatelement(fe: 1.5)

fe.accept(visitor)

print("**********=")

let list:[visitable] = [se, fe]

visitor.visitcollection(list)

abc

1.5**********=

abc1.5

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

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

23種設計模式 訪問者模式

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

23種設計模式之訪問者模式(Visitor)

訪問者模式是一種物件的行為性模式,用於表示乙個作用於某物件結構中的各元素的操作,它使得使用者可以再不改變各元素的類的前提下定義作用於這些元素的新操作。訪問者模式使得增加新的操作變得很容易,但在一定程度上破壞了封裝性。優點 1 更容易新增新操作。2 集中相關操作並且排除不相關操作。使用場景 1 物件結...