訪問者模式

2021-10-04 11:24:01 字數 2887 閱讀 9399

spring 中訪問者模式的使用案例

案例: 現有員工employee, 管理員工managementemployee, 需求,對每個員工增加獎金,每個員工的等級*100,是獎金的演算法,計算每個員工的獎金,與獎金+工資

**示例

員工類

class

employee

public string getname()

public

intgetgrade()

public

intgetsalary()

public

void

setsalary

(int salary)

}

員工管理類

//管理員工資訊類

class

managementemployee

//刪除員工

public

void

detach

(employee employee)

//對每個員工增加獎金的演算法

public

void

bonus()

);}}

客戶端呼叫測試

public

static

void

main

(string[

] args)

分析可能存在的問題: 呼叫managementemployee中的bonus()方法計算員工獎金,假設後續獎金演算法改變了怎麼辦?要根據需求重新修改bonus()方法,違反ocp原則

使用訪問者模式解決問題: 將可能變化的演算法抽取出來,建立出乙個訪問物件,當我們改變獎金演算法時,增加或修改訪問物件即可

什麼叫訪問者: 先了解什麼叫訪問 在資料結構方面來看遍歷就是訪問的一般形式,單獨讀取乙個元素進行相應的處理也叫作訪問,讀取到想要檢視的內容+對其進行處理就叫做訪問,在此處,呼叫獎金演算法方法bonus(),就是一種訪問,將訪問抽取出來建立為乙個可以執行的個體,就是訪問者

訪問者模式: 對於一組物件,在不改變資料結構的情況下(資料結構此處是指employee中各個屬性)增加操作這些結構元素的新功能,把資料結構與運算元據的方法進行解耦(獎金與計算獎金的演算法進行剝離),使操作更加靈活自由

優點 :

單一職責(可能存在多個訪問者,例如多種不同的獎金演算法,每個訪問者只負責一種)

擴充套件性良好,抽象出公共的抽象訪問者介面,後續需要增加其它演算法,實現抽象介面即可

缺點: 固定的資料結構情況下使用,例如employee中的屬性不固定,則不推薦使用

訪問者模式與迭代器模式: 訪問者關注的是儲存在容器中的元素進行某種指定的處理,迭代器模式關注的是對容器中的元素進行逐個遍歷

建立抽象訪問者,建立抽象訪問者原因是便於以後新增其它訪問者,例如後續增加了另外一種獎金演算法,直接實現抽象訪問者即可

//抽象訪問者

inte***ce

visitor

建立具體訪問者,實現訪問方法,也就是employee,計算獎金的方法,抽取出來

//具體訪問者

class

compensationvisitor

implements

visitor

}

建立抽象被訪問者,宣告被宣告型別的訪問者訪問,抽象的原因是便於後續擴充套件,假設,後續還有其他型別的員工,直接繼承即可

//抽象被訪問者

inte***ce

element

建立具體被訪問者,實現抽象訪問者,注意被訪問者與訪問者的互動方法

//具體被訪問者,繼承被訪問者介面

class

employee

implements

element

public string getname()

public

intgetgrade()

public

intgetsalary()

public

void

setsalary

(int salary)

//重點: 重寫接收訪問者方法,接收到訪問者後怎麼操作

//在訪問者中定義訪問方法,而訪問方法要訪問的資料,

//正是當前類物件類物件型別資料(employee是element實現子類)

@override

public

void

accept

(visitor visitor)

}

建立員工管理類,元素容器類

//管理員工資訊類

class

managementemployee

//刪除員工

public

void

detach

(employee employee)

//遍歷容器中被訪問元素,傳遞訪問者物件,呼叫訪問方法

public

void

accept

(visitor visitor)

}

呼叫測試

在 spring ioc中,檢視 beandefinitionvisitor ,bean的訪問者,可以遍歷bean的屬性,使用properties進行填充

訪問者模式

訪問者模式 visitor pattern 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作。一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。一 問題 集合是大多數的系統都要處理的一種容器物件,它儲存了對其它物件的引用。一般情況下,在集合上採取的...

訪問者模式

行為模式中的訪問者模式 訪問者模式是物件的行為模式。訪問者模式的目的是封裝一些施加於某種資料結構元素之上的操作,一旦這些操作需要修改的話,接受這個操作的資料結構則可以保持不變。動機 類層次結構中可能經常由於引入新的操作,從而將型別變得脆弱。在軟體構建過程中,由於需求的改變,某些類層次結構中常常需要增...

訪問者模式

1.說明 namespace visitorspattern 象棋類 public abstract class chess public class redchess chess public class blackchess chess 在贏的情況下的狀態 public class win ac...