一.介紹
訪問者模式(visitor pattern)。屬於行為型模式。表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
二.實現
舉個例子,如果有元素a、b類,想呼叫這些元素中的print方法,很簡單地,只要例項化去呼叫就可以。
publicabstract
class
element
public
class
elementa : element
}public
class
elementb : element
}
但需求不是一成不變的,如果同樣的print方法中,需要根據不同的使用者去列印不同的內容,那只能對各個元素中的print方法進行修改,這就不符合開閉原則。這裡需要改變的東西僅僅是操作的內容,即print方法的內容,元素a、b的結構都不需要改變。如果把操作和結構分離開來,不就可以解決這個問題?我們可以使用訪問者模式來解決這類問題。
//抽象節點
public
abstract
class
element
//具體節點
public
class
elementa : element}//
具體節點
public
class
elementb : element}//
抽象訪問者
public
abstract
class
visitor
//具體訪問者
public
class
visitora : visitor
public
override
void
printelementb()
}//具體訪問者
public
class
visitorb : visitor
public
override
void
printelementb()
}//結構物件容器
public
class
elementcontainer
public
void
detach(element element)
public
void
print(visitor visitor)
}}//
呼叫public
static
void main(string
args)
訪問者模式就是把print的方法封裝到訪問者裡,那如果以後print方法的需求改變,只需要新建乙個訪問者來封裝新的print方法,那就不需要修改原有**。
三.總結
優點:1.訪問者模式使得新增新的操作變得容易。如果一些操作依賴於乙個複雜的結構物件的話,那麼一般而言,新增新的操作會變得很複雜。而使用訪問者模式,增加新的操作就意味著新增乙個新的訪問者類。因此,使得新增乙個新的操作變得容易。
2.訪問者模式使得有關的行為操作集中於乙個訪問者物件中,而不是分散到乙個個元素類中。
3.訪問者模式可以訪問屬於不同的等級結構的成員物件,而迭代只能訪問屬於同一等級結構的成員物件。
缺點:1.增加新的元素類變得困難。每增加乙個新的元素意味著要在抽象訪問者中新增乙個新的抽象操作,並在每乙個具體訪問者中新增對應的具體操作。
C 設計模式 訪問者模式
表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。1.visitor 抽象訪問者角色,為該物件結構中具體元素角色宣告乙個訪問操作介面。該操作介面的名字和引數標識了傳送訪問請求給具體訪問者的具體元素角色,這樣訪問者就可以通過該元素角色的特定介面直接...
C 設計模式 訪問者模式
1 訪問者模式定義 表示乙個作用於其物件結構中的各個元素的操作。訪問者模式是一種物件行為型模式,它為操作儲存不同的型別元素的物件結構提供了一種解決方案,使用者可以對不同型別的元素施加不同的操作。訪問者模式常常和組合模式一起使用。2 訪問者模式結構 該模式包含五種角色 1 抽象訪問者類 visitor...
C 設計模式 訪問者模式
動機 在軟體構建的過程中,由於需求的改變,某些類層次結構中常常需要增加新的行為 方法 如果直接在基類中做這樣的更改,將會給子類帶來很繁重的變更負擔,甚至破壞原有設計。如何在不更改類層次結構的前提下,在執行時根據需要透明地為類層次結構上的各個類動態新增新的操作,從而避免上述問題?模式定義 表示乙個作用...