學習路徑:
public
static
void
main
(string[
] args)
}}
/**
* 課程抽象類
*/public
abstract
class
course
public
void
setname
(string name)
/** * 定義應用層方法,每個子類自己改寫,入參是訪問者
* @param visitor
*/public
abstract
void
accept
(visitor visitor)
;}
/**
* 抽象課程的子類
*/public
class
freecourse
extends
course
/** * 核心方法:
* 傳入visitor物件,
* 內部呼叫visitor物件的visit方法,引數為呼叫者(自己)
* 該方法聯絡了訪問者和課程的兩個抽象物件
* @param visitor 訪問者
*/@override
public
void
accept
(visitor visitor)
}
/**
* 訪問者介面,訪問不同的課程有不同的行為。
* 該模式下,盡量確定被訪問者的數量,不然拓展介面實現會造成大量**修改
*/public
inte***ce
visitor
/**
* 實現訪問者介面,自定義訪問者訪問不同課程的業務邏輯
* 如果要新增乙個訪問者,新增乙個類即可
*/public
class
studentvisitor
implements
visitor
@override
public
void
visit
(freecourse freecourse)
}
應用層的一段**,可以修改主被動關係
for
(visitor visitor : visitorarraylist)
}
其中course.accept(visitor);
可以改為visitor.visit(course);
,但是需要修改介面實現
/**
* 不同的訪問者,有不同的行為
*/public
inte***ce
visitor
else
if(course instanceof
freecourse
)else
}}
設計模式(JAVA) 訪問者模式
場景 將公司中所有人員資訊都列印匯報出來,其中假設公司有兩類人員 1.普通員工 2.管理層 不同人員型別的資訊是不同的。訪問者模式 定義 封裝一些作用於某種資料結構中的各元素的操作,它可以在不改變資料結構的前提下定義作用於這些元素的新的操作。包含如下幾個角色 1.visitor 抽象訪問者 抽象類或...
Java設計模式 訪問者模式
訪問者模式 visitor pattern 以列印公司員工的資訊報表為例。下面先看下類圖。使用了乙個模版方法模式,把所要的資訊都列印出來。這樣子寫出來的 就不太符合公司不同管理層的需要,不能滿足各自的需求。每個普通員工類和經理類都乙個方法 report,那是否可以把這個方法提取到另外乙個類中來實現呢...
JAVA設計模式 訪問者模式
訪問者模式一般被使用者一些資料結構穩定的場合,資料物件穩定,而實際對它的操作是不穩定的,他可以接受不同的物件而做出不同的反應,對與穩定的資料結構,它的功能和方法也就穩定,所以就把它抽象出來,抽取出來,而對於訪問它的物件是經常改變的,傳遞不同的實際物件也就得到不同的執行效果,多型的體現 訪問者模式的參...