設(shè)計(jì)模式之工廠方法(FACTORY METHOD))(二)
2024-07-21 02:23:36
供稿:網(wǎng)友
(接上頁(yè))派生類為這個(gè)選拔基類(seeding)分別建立一個(gè)實(shí)例來(lái)調(diào)用這些方法。我們現(xiàn)在建立這兩個(gè)具體的選拔子類:straightseeding 類circleseeding類。prelimevent類將返回circleseeding類的實(shí)例,timedfinalevent類則返回straightseeding類實(shí)例。
結(jié)構(gòu)如下:
通過(guò)整個(gè)事件層次,可以看到prelimevent類、timedfinalevent類都包含getseeding方法,prelimevent類將返回circleseeding類的實(shí)例,timedfinalevent類則返回straightseeding類實(shí)例。在這個(gè)簡(jiǎn)單的例子當(dāng)中我們并沒(méi)有指出真正的工廠(factory),然而,實(shí)例化哪一個(gè)event類決定了哪一個(gè)seeding類將被實(shí)例化。
雖然它看起來(lái)像是在兩個(gè)類之間存在一對(duì)一相應(yīng)的通信。 但,這不是必需的??梢杂性S多不同類型的events類但他們只使用少一部分seeding類。
swimmer 類
swimmer類包含一些游泳運(yùn)動(dòng)員的具體信息和在選拔之后修改運(yùn)動(dòng)員的組以及泳道的方法。event類在數(shù)據(jù)庫(kù)(在這個(gè)例子中為文本文件)讀取運(yùn)動(dòng)員信息。當(dāng)調(diào)用event類的getseeding方法時(shí)將這個(gè)運(yùn)動(dòng)員的集合傳遞到seeding類。
events 類
我們已經(jīng)定義了一個(gè)抽象基類,在實(shí)際的應(yīng)用當(dāng)中,我們只是使用它來(lái)讀取游泳運(yùn)動(dòng)員的數(shù)據(jù)信息(在這個(gè)例子中為文本文件)。
prelimevent類返回circleseeding實(shí)例
public class prelimevent
inherits events
dim sd as seeding
public overrides function getseeding() as seeding
return new circleseeding(swmmers, numlanes)
end function
public overrides function isfinal() as boolean
isfinal = false
end function
public overrides function isprelim() as boolean
isprelim = true
end function
public overrides function istimedfinal() as boolean
istimedfinal = false
end function
public sub new(byval filename as string, byval lanes as integer)
mybase.new(filename, lanes)
numlanes = lanes
end sub
end class
timedfinalevent類返回straightseeding實(shí)例
public class timedfinalevent
inherits events
public sub new(byval filename as string, byval lanes as integer)
mybase.new(filename, lanes)
end sub
'------
public overrides function getseeding() as seeding
dim sd as seeding
'create seeding and execute it
sd = new straightseeding(swmmers, numlanes)
sd.seed()
getseeding = sd
end function
'------
public overrides function isfinal() as boolean
isfinal = false
end function
'------
public overrides function isprelim() as boolean
isprelim = false
end function
'------
public overrides function istimedfinal() as boolean
istimedfinal = true
end function
end class
中國(guó)最大的web開(kāi)發(fā)資源網(wǎng)站及技術(shù)社區(qū),