訪問者模式

2021-08-07 07:21:24 字數 1642 閱讀 1309

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

抽象訪問者:抽象類或者介面,宣告訪問者可以訪問哪些元素,具體到程式中就是visit方法中的引數定義哪些物件是可以被訪問的。

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

抽象元素類:介面或者抽象類,宣告接受哪一類訪問者訪問,程式上是通過accept方法中的引數來定義的。抽象元素一般有兩類方法,一部分是本身的業務邏輯,另外就是允許接收哪類訪問者來訪問。

元素類:實現抽象元素類所宣告的accept方法,通常都是visitor.visit(this),基本上已經形成一種定式了。

結構物件:乙個元素的容器,一般包含乙個容納多個不同類、不同介面的容器,如list、set、map等,在專案中一般很少抽象出這個角色。

abstract

class

element

inte***ce

ivisitor

class

concreteelement1

extends

element

//轉接方法

public

void accept(ivisitor visitor)

}class

concreteelement2

extends

element

public

void accept(ivisitor visitor)

}//做一層方法的轉接

class

visitor

implements

ivisitor

public

void visit(concreteelement2 el2)

}class

objectstruture else

}return list;

}}public

class

test }}

優點:

符合單一職責原則:element和visitor職責分明

優秀的擴充套件性:職責已經分開,增加新的職責方便

靈活性好:

缺點:具體元素對訪問者公布細節:visitor需要知道element的細節,違反迪公尺特法則

element元素變更困難。

違反依賴倒置原則:訪問者依賴具體元素,而不是介面

使用場景

乙個物件結構包含很多類物件,他們有不同的介面。現在想對這些物件實施一些依賴於其具體類的操作,也就是迭代器模式已不能勝任的情況

需要對乙個物件結構中的物件進行很多不同且不相關的操作,而又想避免讓這些操作汙染這些物件

訪問者模式是對迭代器模式的擴充套件。迭代器模式只能操作相同的類或介面,訪問者可以對不同的類和介面進行操作。在需要訪問多個不同物件的情況下比較適用。

訪問者模式還可以充當***的功能

訪問者模式

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

訪問者模式

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

訪問者模式

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