訪問者模式

2021-09-06 18:01:09 字數 2959 閱讀 7049

什麼是訪問者模式?

今天學習訪問者模式,訪問者模式是a物件訪問b物件的一種模式。非也。

那麼,何謂訪問者模式呢?真難理解!因為這個名字就***超晦澀,讓人聽不懂,或許只是此名稱本身有且僅有的乙個抽象意義而已。

何謂抽象意義呢?如果你理解了《類的概念》大概你才會有所參透。

我一直理解:抽象是多型的爸爸。怎麼解釋呢?你想想:

類都是超級抽象的,而經由父類(即基類)衍生的子類(即派生類)就是 「多型」 的全部內在意義。

訪問者模式,其實沒那麼複雜(呵呵!或許竊理解有誤)。模式即一種做法,所以一句話概述:

把資料資訊和操作行為各自分開處理而不放在一坨的做法。(要不,誰訪問誰呀?你先琢磨琢磨。)

訪問者模式**示例:

**示例1(一般寫法):

1 #include 2 #include 3 #include 

4using

namespace

std;56

class

person7;

1213

class man : public

person

1422

else

if (action == "戀愛"

)2326}

27};

2829

class woman : public

person

3038

else

if (action == "戀愛"

)3942}

43};

4445

void

main()

4670}71

//result:

72/*

73男人成功時,背後多半有乙個偉大的女人。

74女人成功時,背後多半有失敗的男人。

75男人戀愛時,凡事不懂裝懂。

76女人戀愛時,遇到事懂也裝不懂。

77*/

**示例2(訪問者模式寫法):

1 #include 2 #include 3 #include 

4using

namespace

std;56

class

man;

7class

woman;89

class

action

10;

1516

class success : public

action

1722

void getwomanconclusion(woman *)

2326

27};

2829

class love : public

action

3035

void getwomanconclusion(woman *)

3639

};40

41class

person42;

4647

class man : public

person

4854

};55

56class woman : public

person

5763

};64

65class

objectstructure

6675

void detach(person*element)

7683}84

}85void display(action *visitor)

8691}92

};93

94int

main()

95111

//result:

112/*

113男人成功時,背後多半有乙個偉大的女人

114女人成功時,背後多半有不成功的男人

115男人戀愛時,凡事不懂裝懂

116女人戀愛時,凡事懂也裝不懂

117*/

view code

訪問者模式角色分析

在訪問者模式中,主要包括下面幾個角色:

抽象訪問者:一般為抽象類或者介面(如上例action),宣告訪問者可以訪問哪類元素。

具體到程式中就是visit方法中的引數定義哪些型別的元素是可以被訪問的。

訪問者:實現抽象訪問者所宣告的方法(如上例success,love),它影響到訪問者具體訪問到一種元素後該幹什麼,要做什麼事情。

抽象元素類(被訪問者):一般為抽象類或者介面(如上例person),宣告接受哪一類訪問者訪問,程式上是通過accept方法中的引數來定義的。

抽象元素一般有兩類方法,一部分是本身的業務邏輯,另外就是允許接收哪類訪問者來訪問。

元素類(被訪問者):實現抽象元素類所宣告的accept方法(如上例man,woman),通常都是以this指標為實參,基本上已經形成一種定式。

元素物件(被訪問者)容器:乙個元素的容器(如上例objectstructure),一般包含乙個容納多個不同類、不同介面的容器,如list、set、map等,在專案中一般很少抽象出這個角色。

訪問者模式總結

應用情景:訪問者模式適用於資料結構穩定的系統。實質上把資料結構和作用於資料結構上的操作分離開。

因為訪問者模式使得演算法操作增加變得更容易。若系統資料結構物件易於變化,經常有新的資料物件增加進來,則不適合使用訪問者模式。

優點:新增加操作很容易,因為新增加操作相當於增加乙個訪問者。

由以上示例可以得知:訪問者模式將有限的行為操作(訪問者)集中到有限個資料結構(訪問者)物件上。

比如,我們現在需求再增加乙個「失敗」的操作。只需要繼承自action再實現乙個所謂的 「失敗」 訪問者即可。

good  good   study,  day  day   up.

順序  選擇   迴圈  總結

訪問者模式

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

訪問者模式

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

訪問者模式

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