這種型別的設計模式屬於行為型模式,它他解決了方法的合理呼叫
狀態模式用於乙個事件或物件有很多狀態,狀態之間會互相轉換,對不同狀態有不同的行為的情況
狀態模式將不同的情況封裝為乙個類 這樣避免了if/else的多次呼叫 而且增加新的情況不改變原有**
這樣可以通過只一次判斷狀態就可以完成相應方法的呼叫
需要的成員 :
狀態類 :寫乙個狀態類的介面提供基本標準 讓不同狀態類實現介面 產生不同的狀態
活動類 :寫乙個活動類組合介面來通過判斷狀態呼叫不同行為
//狀態抽象類 (介面也行)
public
abstract
class
state
//表示可以**的狀態
public
class
canrafflestate
extends
state
@override
public
void
deductmoney()
@override
public
boolean
raffle()
else
}@override
public
void
dispenseprize()
}///不能**的狀態
public
class
norafflestate
extends
state
@override
public
void
deductmoney()
@override
public
boolean
raffle()
@override
public
void
dispenseprize()
}//發獎的狀態
public
class
dispensestate
extends
state
@override
public
void
deductmoney()
@override
public
boolean
raffle()
@override
public
void
dispenseprize()
else}}
//獎品發完的狀態
public
class
dispenseoutstate
extends
state
@override
public
void
deductmoney()
@override
public
boolean
raffle()
@override
public
void
dispenseprize()
}
//活動類
public
class
raffleactivity
public
void
debuctmoney()
public
void
raffle()
}public
intgetcount()
/***************下面getter/setter 不重要**********************************/
public state getstate()
public
void
setstate
(state state)
public
void
setcount
(int count)
public state getnorafflestate()
public
void
setnorafflestate
(state norafflestate)
public state getcanrafflestate()
public
void
setcanrafflestate
(state canrafflestate)
public state getdispensestate()
public
void
setdispensestate
(state dispensestate)
public state getdispensoutstate()
public
void
setdispensoutstate
(state dispensoutstate)
}
//使用者
public
class
user
}}
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之 狀態模式
gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...
設計模式之狀態模式
定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...