什麼是訪問者模式?
今天學習訪問者模式,訪問者模式是a物件訪問b物件的一種模式。非也。
那麼,何謂訪問者模式呢?真難理解!因為這個名字就***超晦澀,讓人聽不懂,或許只是此名稱本身有且僅有的乙個抽象意義而已。
何謂抽象意義呢?如果你理解了《類的概念》大概你才會有所參透。
我一直理解:抽象是多型的爸爸。怎麼解釋呢?你想想:
類都是超級抽象的,而經由父類(即基類)衍生的子類(即派生類)就是 「多型」 的全部內在意義。
訪問者模式,其實沒那麼複雜(呵呵!或許竊理解有誤)。模式即一種做法,所以一句話概述:
把資料資訊和操作行為各自分開處理而不放在一坨的做法。(要不,誰訪問誰呀?你先琢磨琢磨。)
訪問者模式**示例:
**示例1(一般寫法):
1 #include 2 #include 3 #include**示例2(訪問者模式寫法):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*/
1 #include 2 #include 3 #includeview code4using
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*/
訪問者模式角色分析
在訪問者模式中,主要包括下面幾個角色:
抽象訪問者:一般為抽象類或者介面(如上例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...