24種設計模式 訪問者模式

2021-08-04 20:20:02 字數 2893 閱讀 6591

定義:封裝一些作用於某種資料結構(list/set/map)中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。

一、訪問員工資訊

1. 訪問者介面

public inte***ce ivisitor
2. 訪問者實現

public class visitor implements ivisitor

//訪問部門經理,列印出報表

public void visit(manager manager)

//組裝出基本資訊

private string getbasicinfo(employee employee)

//組裝出部門經理的資訊

private string getmanagerinfo(manager manager)

//組裝出普通員工資訊

private string getcommonemployee(commonemployee commonemployee)

}

3. 抽象員工類

public abstract class employee
4. 普通員工

public class commonemployee extends employee

public void setjob(string job)

//我允許訪問者訪問

public void accept(ivisitor visitor)

}

5. 管理層員工

public class manager extends employee

public void setperformance(string performance)

//部門經理允許訪問者訪問

public void accept(ivisitor visitor)

}

6. 場景類

public class client 

} //模擬出公司的人員情況,我們可以想象這個資料是通過持久層傳遞過來的

public static listmockemployee()

}

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

1. 抽象元素

public abstract class element
2. 具體元素

public class concreteelement1 extends element

//允許那個訪問者訪問

public void accept(ivisitor visitor)

}

&

public class concreteelement2 extends element

//允許那個訪問者訪問

public void accept(ivisitor visitor)

}

3. 抽象訪問者

public inte***ce ivisitor
4. 具體訪問者

public class visitor implements ivisitor

//訪問el2元素

public void visit(concreteelement2 el2)

}

5. 結構物件

public class objectstruture else

}}

6. 場景類

public class client 

}}

三、訪問者模式的應用1. 優點符合單一職責原則:具體元素角色也就是employee抽象類的兩個子類負責資料的載入,而visitor類則負責報表的展現,兩個不同的職責非常明確地分離開來。

2. 缺點

具體元素對訪問者公布細節:訪問者要訪問乙個類就必然要求這個類公布一些方法和資料,也就是說訪問者關注了其他類的內部細節,這是迪公尺特法則所不建議的。

具體元素變更比較困難:具體元素角色的增加、刪除、修改都是比較困難的,就上面那個例子,要是想增加乙個成員變數,如年齡age,visitor就需要修改,如果visitor是乙個還好辦,多個就很複雜了。

3. 使用場景

1)乙個物件結構(list/set/map等)包含很多類物件,它們有不同的介面,而你想對這些物件實施一些依賴於其具體類的操作,也就是說迭代器模式已經不能勝任的情景。

2)需要對乙個物件結構(list/set/map等)中的物件進行很多不同並且不相關的操作,而你想避免讓這些操作「汙染」這些物件的類。

23種設計模式 訪問者模式

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

設計模式 訪問者模式

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

設計模式 訪問者模式

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