C 設計模式 訪問者模式

2022-08-20 22:03:18 字數 1174 閱讀 3187

動機

在軟體構建的過程中,由於需求的改變,某些類層次結構中常常需要增加新的行為(方法),如果直接在基類中做這樣的更改,將會給子類帶來很繁重的變更負擔,甚至破壞原有設計。

如何在不更改類層次結構的前提下,在執行時根據需要透明地為類層次結構上的各個類動態新增新的操作,從而避免上述問題?

模式定義

表示乙個作用於某物件結構中的各元素的操作。使得可以在不改變(穩定)各元素的類的前提下定義(擴充套件)作用於這些元素的信操作(變化)

結構

objectstructure(物件結構):能夠列舉它的元素,同時提供乙個高層的介面以允許該訪問者訪問它的元素。

示例

class visitor;

class element

};class elementa : public element

};class elementb : public element

};class visitor

};//******************************====

//擴充套件1

class visitor1 : public visitor

void visitelementb(elementb& element) override

};

//擴充套件2

class visitor2 : public visitor

void visitelementb(elementb& element) override

};

int main()

設計模式中經常說的一句話是:發現變化並封裝之。是否採用訪問者模式,就要看「變化」是什麼。訪問者模式中,「變化」是具體訪問者,其次是物件結構;但是,如果具體元素也會發生改變,就不能使用訪問者模式,因為這樣「牽一髮而動全身」

因此visitor模式最大缺點在於擴充套件類層次結構(新增新的element子類),會導致vistor類的改變。因此vistor模式適用於element類層次結構穩定,而其中的操作卻經常面臨頻繁改動。

C 設計模式 訪問者模式

表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素類的前提下定義作用於這些元素的新操作。1.visitor 抽象訪問者角色,為該物件結構中具體元素角色宣告乙個訪問操作介面。該操作介面的名字和引數標識了傳送訪問請求給具體訪問者的具體元素角色,這樣訪問者就可以通過該元素角色的特定介面直接...

C 設計模式 訪問者模式

1 訪問者模式定義 表示乙個作用於其物件結構中的各個元素的操作。訪問者模式是一種物件行為型模式,它為操作儲存不同的型別元素的物件結構提供了一種解決方案,使用者可以對不同型別的元素施加不同的操作。訪問者模式常常和組合模式一起使用。2 訪問者模式結構 該模式包含五種角色 1 抽象訪問者類 visitor...

C 設計模式 訪問者模式

一.介紹 訪問者模式 visitor pattern 屬於行為型模式。表示乙個作用於某物件結構中的各元素的操作,它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。二.實現 舉個例子,如果有元素a b類,想呼叫這些元素中的print方法,很簡單地,只要例項化去呼叫就可以。public a...