設計模式筆記 訪問者模式

2021-09-12 14:31:40 字數 3109 閱讀 5607

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

visitor類,為該物件結構中concretevisitor的每乙個類宣告乙個visit操作。訪問者介面為使用不同演算法的子類宣告訪問操作。

public

abstract

class

visitor

concretevisitor1和concretevisitor2類,具體訪問者。每個操作實現這種演算法(1或2)的一部分。

public

class

concretevisitor1

extends

visitor

@override

public

void

visitconcreteelementb

(concreteelementb concreteelementb)

}public

class

concretevisitor1

extends

visitor

element類,定義乙個accept操作介面,它以乙個訪問者為引數

public

abstract

class

element

concreteelementa和concreteelementb類,具體元素,實現accept操作。

public

class

concreteelementa

extends

element

public

void

operationa()

---其它的相關方法

}public

class

concreteelementb

extends

element

public

void

operationb()

---其它的相關方法

}

objectstructure類,能列舉它的元素,提供乙個高層介面以允許訪問者訪問它的元素

public

class

objectstructure

public

void

visit

(visitor visitor)

}}

客戶端**

public

static

void

main

(string[

] args)

concreteelementa被concretevisitor1訪問

concreteelementb被concretevisitor1訪問

----

----

----

-------

concreteelementa被concretevisitor2訪問

concreteelementb被concretevisitor2訪問

舉乙個例子來理解該模式:人分為男人和女人,男人和女人在成功或戀愛時的反應不同。

這裡人的屬性男人和女人可以當成concreteelement

成功和戀愛或其它的狀態可以當成concretevisitor,它們去訪問元素(男人或女人)的具體反應。

people抽象類

public

abstract

class

person

狀態抽象類

public

abstract

class

action

man類和woman類

public

class

manextends

person

}public

class

woman

extends

person

}

狀態的子類,success類(concretevisitor),其餘狀態(戀愛等)和success類**類似不進行列舉。

public

class

success

extends

action

@override

public

void

getwomanconclusion

(person woman)

}

物件結構類

public

class

objectstructure

public

void

display

(action visitor)

}}

客戶端測試

public

static

void

main

(string[

] args)

mansuccess高調

womansuccess低調

訪問者模式只適用於資料結構相對穩定的系統,例如上面的示例中人只分為男人和女人兩個型別,如果能有多個性別,「狀態」類中的抽象方法就不可能穩定,每增加乙個類別,就需要在狀態類和它的下屬類中都增加乙個方法。

訪問者模式把資料結構和作用於結構之上的操作之間的耦合解開,使得操作集合可以相對自由地演化。訪問者模式的目的是要把處理從資料結構分離出來,如果系統有穩定的資料結構,又有易於變化的演算法的話,使用訪問者模式就是合適的,訪問者模式使演算法操作的增加變得容易。

設計模式筆記 訪問者模式

封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。visitor 抽象訪問者 抽象類或介面,宣告訪問者可以訪問哪些元素,具體到程式中就是visit方法的引數定義哪些物件是可以被訪問的 public inte ce ivisitorvisitor ...

設計模式 訪問者模式

訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...

設計模式 訪問者模式

訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...