設計模式(C 實現)(十九) 訪問者模式

2021-09-24 10:17:03 字數 2571 閱讀 3979

對於應屆畢業生找工作是去大公司還是去小公司的問題,網上有諸多說法。比如,管理制度和規章制度方面,小公司不是很健全,大公司比較健全;綜合能力提公升方面,小公司人少,要做的事多,對綜合能力提公升較快,大公司則專注某乙個模組,綜合能力鍛鍊不是太多,但可以把這個模組做精做細;職位上公升方面,小公司人少,機會較多,而大公司由於人多,所以往上走就比較困難,同時公司讓乙個人去負責乙個大專案的機會也很少。等等等

寫乙個程式描述上面情況,要考慮在去大公司還是小公司時,新增考慮因素時程式的擴充套件。

ps:上面問題只是乙個示例,並不代表正確觀點(去大小公司方面)。對於網上的關於去大小公司的說法,也請辯證理性看待。

如果將大公司和小公司作為兩個類,考慮因素作為這兩個類的屬性,當屬性(考慮因素)的值分別是「管理制度和規章制度方面」、「綜合能力提公升方面」、「職位上公升方面」等時,輸出特性。那這樣的話,需要在判斷屬性值是什麼,然後分別輸出,需要在程式內有很多判斷邏輯,且如果新增屬性(考慮因素)的值時,需要改動**。

visitor.h

在該檔案中,實現了考慮因素的基類ielement,及考慮因素的子類(考慮因素的具體內容)——cregime(管理制度、規章制度)、ccapacity(綜合能力)、crose(職位上公升)。公司基類icompany,及其子類cbigcompany(大公司)、csmallcompany(小公司)。通過icompany的accept介面,將ielement作為引數去訪問icompany,具體針對icompany子類的處理有ielement的子類去做判斷,這樣實現了對公司考慮因素的多種情況的判斷處理在外部進行。

#pragma once

#include #include //考慮因素基類

class ielement

virtual ~ielement()

virtual void printpigcompanysituation() = 0;

virtual void printsmallcompanysituation() = 0;

};//公司基類

class icompany

virtual ~icompany()

virtual void accept(ielement* pvisitor) = 0;

};//管理制度、規章制度

class cregime : public ielement

void printsmallcompanysituation() };

//綜合能力

class ccapacity : public ielement

void printsmallcompanysituation() };

//職位上公升

class crose : public ielement

void printsmallcompanysituation() };

//大公司

class cbigcompany : public icompany

virtual ~cbigcompany()

void accept(ielement* pvisitor) }

};//小公司

class csmallcompany : public icompany

virtual ~csmallcompany()

void accept(ielement* pvisitor) }

};

main.cpp

//#include "visitor.h"

int main()

if (nullptr != pcapacity)

if (nullptr != prose)

system("pause");

return 0;}

執行結果

訪問者模式,表示乙個作用於某物件結構中的各元素的操作。它是你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。

訪問者模式適用於資料結構相對穩定的系統。它把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由地演化。

如上面例子,如果要新增辦公環境這個考慮因素時,則值需要再實現辦公環境基於ielement的子類,再客戶呼叫的時候,呼叫公司類的accept傳入該物件指標即可,而不用再去修改公司類,符合開放-封閉原則。

訪問者模式的目的是要把處理從資料結構分離出來。很多系統可以按照演算法和資料結構分開,如果這樣的系統有比較穩定的資料結構,又有易於變化的演算法的話,使用訪問者模式就是比較合適的,因為訪問者模式使得演算法操作的增加變得容易。

反之,如果這樣的系統的資料結構物件易於變化,經常要有新的資料物件增加進來,就不適合使用訪問者模式。

訪問者模式的優點就是增加新的操作很容易,因為增加新的操作就意味著增加乙個新的訪問者。訪問者模式將有關的行為集中到乙個訪問者物件中。

訪問者模式的缺點其實也就是使增加新的資料結構變得困難了。

返回目錄:設計模式(c++實現)(總)

C 設計模式 訪問者模式

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

C 設計模式 訪問者模式

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

C 設計模式 訪問者模式

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