在大話設計模式一書中提到一種場景,男人和女人在面對不同的事情時會有不同的反應,例如成功、失敗、結婚、戀愛等等,在這種結構相對穩定(只有男人和女人),而遇到的情況多變的情形下,我們就可以用訪問者模式來實現,還是先看下面的介紹吧。
1、定義
表示乙個作用於某物件結構中的各元素的操作。它可以使你在不改變各元素的類的前提下定義作用於這些元素的新操作。
2、類圖結構
就拿男人和女人在對待不同事情狀況時的表現來說明
讓我們來看更加直觀的**表示
action(狀態):
public
abstract
class action
具體狀態
public
class
success
extends
action
@override
public
void
getwomanconclusion(woman concreteelementb)
}
public
class
failing
extends
action
@override
public
void
getwomanconclusion(woman concreteelementb)
}
結構物件person:
public
abstract
class person
男人和女人:
public
class
manextends
person
}
public
class
woman
extends
person
}
物件結構(用於提供訪問者介面):
public
class objectstructure
public
void
detach(person p)
//檢視顯示
public
void
display(action action)}}
來看客戶端如何呼叫:
objectstructure o = new objectstructure();
o.attach(new man());
o.attach(new woman());
//成功
success v1 = new success();
o.display(v1);
//失敗
failing v2 = new failing();
o.display(v2);
結果為:
visitor.manvisitor
.success哈哈哈
visitor.womanvisitor
.success嚶嚶嚶
visitor.manvisitor
.failing喝喝喝
visitor.womanvisitor
.failing嗚嗚嗚
訪問者模式適用於資料結構相對穩定的系統,它將資料結構與作用於結構上的操作進行解耦,使操作集合可以相對自由的變化;它的優點就是使得增加新的操作很容易,缺點就是增加新的資料結構很困難,因為資料結構的變化會使得整個操作的集合也得進行調整,像我們例子中,人分為男人女人,這就是屬於資料結構相對穩定的一種,適合用訪問者模式來實現。 訪問者模式(行為型)
在實際開發中也會遇到這種情況,有乙個屬性類e,有abcd四個屬性,另外有四個類abcd,要去訪問類e,a只訪問屬性a,b只訪問屬性b,c只訪問屬性c,d只訪問屬性d。這時候訪問者模式就派上用場了。定義 封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變這個資料結構的前提下定義作用於這些元素的...
Java設計模式 行為型 訪問者模式
這個世界上存在很多事情,每個人都有各自要做的事情,有屬於你的事情,當然也有屬於我的事情,不過我們都在為各自的事情努力奮鬥。這個世界存在的很多事情 public inte ce goal 我有我的目標 public inte ce yougoal 你有你的目標 public inte ce megoa...
二十四 訪問者模式(行為型)
visitor模式也叫訪問者模式,是行為模式之一,它分離物件的資料和行為,使用visitor模式,可以不修改已有類的情況下,增加新的操作。比如有乙個公園,有一到多個不同的組成部分 該公園存在多個訪問者 清潔工a負責打掃公園的a部分,清潔工b負責打掃公園的b部分,公園的管理者負責檢點各項事務是否完成,...