基本介紹
1、訪問者模式(visitor pattern),封裝一些作用於某種資料結構的各個元素的操作,它可以在不該拜年資料結構的前提下定義作用於這些元素的新的操作。
2、主要將資料結構於資料操作分離,解決資料結構和操作耦合的問題。
3、訪問者模式的基本工作原理是:在被訪問類的裡面新增乙個對外提供接待訪問者的介面。
4、訪問者模式主要應用場景是:需要對乙個物件結構中的物件進行很多不同操作(這些操作彼此沒有什麼關聯),同時需要避免這些操作汙染這些物件的類,可以選用訪問者模式。
5、物件結構比較穩定,但經常需要在此物件結構上定義新的操作,使用訪問者模式更容易擴充套件。物件結構不穩定,使用訪問者模式會使得程式更加複雜。
6、一句話總結:在結構不變的情況下,動態的改變對於內部元素的訪問。
類圖
類圖說明:
1、visitor 是抽象訪問者,為該物件結構中的concreteelement每乙個類宣告乙個visit操作。
2、concretevisitor:是具體訪問者,實現每個visitor宣告的操作,是每個操作具體實現。
3、obejctstruture:能列舉它的元素,可以提供乙個高層的介面,用來允許訪問者訪問它的元素:
4、element:定義乙個accept()方法,接收乙個訪問者物件。
5、concreteelement:具體元素,實現了accept方法。
小需求:組裝一台電腦,每個部件針對不同的人群有不同的折扣,比如說,電腦由主機、螢幕、鍵盤、滑鼠構成,結構不再變動。學生人群主機8折、螢幕7折、鍵盤8折、滑鼠8折;公司採購員人群主機6折、螢幕6折、鍵盤5折、滑鼠5折等等。可以使用訪問者模式實現,不然就需要在computer類中新增各種判斷,每增加一種人群型別都需要新增乙個判斷。
根據需求與訪問這模式畫出類圖
**實現
優點1、訪問這模式符合單一職責原則,讓程式具有更好的擴充套件性。package com.example.pattern.visitor;
import lombok.getter;
import lombok.setter;
/** * 訪問者模式
*/inte***ce
visitor
@setter
@getter
class
studenttypevisitor
implements
visitor
@override
public
void
visitscreen
(screen screen)
@override
public
void
visitkeyboard
(keyboard keyboard)
@override
public
void
visitmouse
(mouse mouse)
}@setter
@getter
class
corptypevisitor
implements
visitor
@override
public
void
visitscreen
(screen screen)
@override
public
void
visitkeyboard
(keyboard keyboard)
@override
public
void
visitmouse
(mouse mouse)
}@getter
@setter
public
class
computer
}abstract
class
computerpart
class
mainframe
extends
computerpart
@override
public double getprice()
}class
screen
extends
computerpart
@override
public double getprice()
}class
keyboard
extends
computerpart
@override
public double getprice()
}class
mouse
extends
computerpart
@override
public double getprice()
}class
client
}
2、訪問者模式可以對功能進行統一,可以做報表等資料結構非常穩定的系統。
缺點
1、具體元素對訪問者公布細節,也就是說訪問者關注了其它類的內部細節,不符合迪公尺特法則,這樣也就造成了具體元素的變更比較困難,修改起來比較麻煩。
2、違背了依賴倒轉原則,訪問者依賴的是具體元素,而不是抽象元素。
3、因此訪問者模式適合於擁有穩定的資料結構、但是功能經常變化的系統。
設計模式學習 訪問者模式
訪問者模式,表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的操作。訪問者模式適用於資料結構相對穩定的系統,它把資料結構和作用於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由地演化。訪問者模式的目的是要把處理從資料結構分離出來。若乙個系統有比較...
設計模式 訪問者模式
訪問者模式是一種資料操作與資料結構分離的設計模式,訪問者模式的基本想法是,軟體系統中擁有乙個由許多物件構成的 比較穩定的物件結構,這些物件的類都擁有乙個accept方法用來接受訪問者物件的訪問。訪問者是乙個介面,它擁有乙個visit方法,這個方法對訪問到的物件結構中不同型別的元素作出不同的處理。在物...
設計模式 訪問者模式
訪問者模式 visitor 表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。例子 男人和女人在不同的狀態下會有不同反應,採用訪問者模式,可以增加狀態很方便 抽象狀態類 class action 男人反應 virtual void getwom...