訪問者模式

2021-09-06 08:35:31 字數 1813 閱讀 9395

封裝某些作用於某種資料結構中各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。

先上一張圖:

抽象訪問者:抽象類或者介面,宣告訪問者可以訪問哪些元素

訪問者:實現抽象訪問者所宣告的方法,它影響到訪問者訪問到乙個類後該幹什麼,要做什麼事情。

抽象元素類:介面或者抽象類,宣告接受哪一類訪問者訪問。

元素類:實現抽象元素類所宣告的方法。

結構物件:乙個元素的容器,一般包含乙個容納多個不同類、不同介面的容器,如list、set、map等。

就模擬一下檔案訪問操作。

抽象訪問者

/**

* * 抽象訪問者類:申明可以訪問哪些元素

* */

public

inte***ce

visiter

訪問者
/**

* 具體的訪問者

* */

public

class

visitera

implements

visiter

@override

public

void

visit

(docb docb)

}

抽象元素類
/**

* * 抽象元素類:宣告 接受何種型別的訪問。

* */

public

abstract

class

doc

具體的元素類

這裡可以把readdoc方法交由visiter實現。

/**

* * 具體的元素類a(concreteelement)

* */

public

class

doca

extends

doc@override

public string readdoc()

}

/**

* 具體的元素類b(concreteelement)

* */

public

class

docb

extends

doc@override

public string readdoc()

}

結構物件
/**

* *檔案袋:結構物件,容納元素

*/public

class

docbag

return docs;

}}

客戶端測試類
public

看完**就發現了,訪問者模式主要將資料結構與資料操作分離。但是這樣不符合迪公尺特原則。

優點:

1、可擴充套件性比較好,靈活。元素類可以通過接受不同的訪問者來實現對不同操作的擴充套件。

2、符合單一職責原則。

缺點

1、具體元素對訪問者公布細節,違反了迪公尺特原則。

2、因為訪問者對應著具體元素的操作,所以新增元素的話需要修改很多地方。

訪問者模式

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

訪問者模式

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

訪問者模式

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