訪問者模式的概念:
訪問者表示乙個作用某個物件結構的各元素的操作。可以在不改變各個類的前提下定義作用這些元素的新操作。
目的:
把處理資料從資料結構中分離出來。有比較穩定的資料結構又有易於變化的演算法。
好處:
訪問者使得演算法操作的增加變得簡單,換句話說,就是訪問者增加新操作很容易。增加乙個新操作就相當於增加乙個訪問者,訪問者模式就是一系列有關的行為集中到乙個訪問者物件中。
缺點:
雖然增加新操作很容易,但是增加新的資料結構變得困難。也就是說在原有的資料結構上增加新操作是很容易的,而要改變原有資料結構就變得很困難了。
先來看**:
/**
* 訪問者基本抽象類
*/public
abstract
class
visitor
/**
* 定義乙個接收抽象類,以乙個訪問者為引數
*/public
abstract
class
element
/**
* 具體訪問者
*/public
class
concretevistora
extends
visitor
@override
public
void
vistorb(concreteelementb concreteb)
}
/**
* 具體接收類
*/public
class
concreteelementa
extends
element
//其他方法
public
void
operationa()
}
/**
* 提供乙個高層的介面以允許訪問者訪問它的元素
*/public
class
objectstructure
//移除接收者例項
public
void
remove(element element)
//傳入訪問者例項,給每個接收者都新增傳入的訪問者例項
public
void
accept(visitor visitor)
}}
//執行**
private
void
test()
看**可以看出,如果我們還要新增訪問者或者被訪問者(接收者)。
只需要實現訪問者和被訪問者抽象類。
在高階介面中我們分別新增訪問者和被訪問者,這樣只要執行了objectstructure的accept方法,並且傳入了訪問者例項,所有的被訪問元素都會被訪問者呼叫到。
例如,接收者可以是女人,和男人。
訪問者可以是各種狀態,失戀,結婚。
當女人這個接收者被放進高階介面(objectstructure)中,並新增了一些列的訪問者(失戀,結婚)。
最後就是在失戀中傳入女人,這時候就是女人被失戀訪問了。
那麼這個女人的資料結構就變成了:
當女人失戀時,傷心
當女人結婚時,高興
換句話說就是,女人訪問了失戀,結果傷心。女人訪問了結婚,結果高興。
訪問者也是一把雙刃劍,訪問者模式比較複雜但是它的能力非常大。如果不理解訪問者模式,實在是不會去想用它的吧。
設計模式之訪問者模式
先看一下下面這段 class person public string getaction public void setaction string action public void getconclusion else if action exciting else if action gri...
設計模式之訪問者模式
我們去銀行櫃檯辦業務,一般情況下會開幾個個人業務櫃檯的,你去其中任何乙個櫃檯辦理都是可以的。我們的訪問者模式可以很好付諸在這個場景中 對於銀行櫃檯來說,他們是不用變化的,就是說今天和明天提供個人業務的櫃檯是不需要有變化的。而我們作為訪問者,今天來銀行可能是取消費流水,明天來銀行可能是去辦理手機銀行業...
設計模式之訪問者模式
定義 表示一介作用於某個物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。結構圖 示例 public inte ce vistor public class concretevisitor1 implements vistor override public ...