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

2021-08-05 19:09:00 字數 2504 閱讀 5548

訪問者模式,用來解決多個訪問者訪問多個不同元素的問題。訪問者模式引入了訪問者角色和被訪問者角色,不同訪問者訪問元素的方式不同。

公司員工分為全職員工和兼職員工(這裡員工就是被訪問者),公司有財務部結算工資,人力資源部計算工作時長(這裡財務部和人力資源部為訪問者),於是就有了不同訪問者訪問不同被訪問者的情況。

訪問者模式uml類圖如圖:

示例**:

抽象訪問者:

/*****

* 抽象訪問者,財務部和人力資源部類的父類

* @author wjw

* */

public abstract class visitor

財務部和人力資源部兩個具體訪問者:

/*****

* 財務部訪問者

* @author wjw

* */

public class caiwuvisitor extends visitorelse if(bevisitored instanceof part)else

}}

/****

* 人力資源訪問類

* @author wjw

* */

public class renliziyuanvisitor extends visitorelse if(bevisitored instanceof part)else

}}

被訪問者介面:

/*****

* 被訪問者介面,全職員工和兼職員工實現該介面

* @author wjw

* */

inte***ce bevisitored

全職員工和兼職員工兩個具體被訪問者:

/*****

* 全職員工

* @author wjw

* */

public class all implements bevisitored

@override

public void accept(visitor visitor)

public string getname()

public void setname(string name)

public int gettime()

public void settime(int time)

public int getmoney()

public void setmoney(int money)

}

/****

* 兼職員工類

* @author wjw

* */

public class part implements bevisitored

@override

public void accept(visitor visitor)

public string getname()

public void setname(string name)

public int gettime()

public void settime(int time)

public int getmoney()

public void setmoney(int money)

}

訪問輔助類:

/****

* 本類為「物件結構類」(這是乙個專有名詞,不必強要理解),也屬於訪問者模式一員,具有輔助訪問功能:

* 本類主要完成:將被訪問者新增到集合中,便於訪問者批量訪問被訪問者

* @author wjw

* */

public class employeeutils

/****

* 所有被訪問者接受某特定訪問者訪問

*/public void aaccept(visitor visitor)}}

main方法:

public class main 

}

執行結果:

全職被訪問者:王朕本月工作時長為:100小時!

全職被訪問者:王明明本月工作時長為:100小時!

兼職被訪問者:竇唯本月工資為:100小時!

兼職被訪問者:樸樹本月工資為:100小時!

示例**說明:大多數說明都在類中注釋了

訪問者模式說明:訪問者模式用來解決多個訪問者訪問多個被訪問者的問題,所以,不同訪問者面對不同被訪問者有不同處理方式。而訪問者模式恰恰用來解決這種問題。訪問者模式如果擴充套件訪問者容易擴充套件,但擴充套件被訪問者需修改**,這屬於開閉原則傾斜行。

如有錯誤,歡迎指正

end

23種設計模式 訪問者模式

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

設計模式(23) 訪問者 Visitor

目錄 設計模式學習筆記首頁 設計模式 1 抽象工廠 abstractfactory 設計模式 2 生成器 builder 設計模式 3 工廠方法 factory method 設計模式 4 原型 prototype 設計模式 5 單例 singleton 設計模式 6 介面卡 adapter 設計模...

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

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