設計模式之狀態模式

2021-10-03 19:37:11 字數 3613 閱讀 1374

學習設計模式的日常demo

狀態模式基本介紹

狀態模式原理類圖

狀態模式案例

**實現:

*

** 抽象狀態類

*@author administrator **

/public

abstract

class

state

/** * **活動

* * @author administrator

*/public

class

raffleactivity

// 扣除獎券

public

void

debuctmoney()

// **

public

void

raffle()

}public state getstate()

public

void

setstate

(state state)

// 每領取一次獎品,其數量要減少

public

intgetcount()

public

void

setcount

(int count)

public state getnoraffllestate()

public

void

setnoraffllestate

(state noraffllestate)

public state getcanrafflestate()

public

void

setcanrafflestate

(state canrafflestate)

public state getdispensestate()

public

void

setdispensestate

(state dispensestate)

public state getdispensoutstate()

public

void

setdispensoutstate

(state dispensoutstate)

}// 抽象狀態類的具體子類

/** * 不能**的狀態

* @author administrator

* */

public

class

norafflestate

extends

state

// 當前狀態可以扣獎券,扣除後,將狀態設定為可以**

@override

public

void

deductmoney()

// 當前狀態不能**

@override

public

boolean

raffle()

// 當前狀態不能發放獎品

@override

public

void

dispenseprize()

}/**

* 可以**的狀態

* * @author administrator

*/public

class

canrafflestate

extends

state

// 獎券已經支付

@override

public

void

deductmoney()

// 可以**,根據**結果改變狀態

@override

public

boolean

raffle()

else

}// 不能發放獎品

@override

public

void

dispenseprize()

}/**

* 發放獎品狀態

* @author administrator

* */

public

class

dispensestate

extends

state

//@override

public

void

deductmoney()

@override

public

boolean

raffle()

// 發放獎品

@override

public

void

dispenseprize()

else}}

/** * 不能**的狀態

* @author administrator

* */

public

class

norafflestate

extends

state

// 當前狀態可以扣獎券,扣除後,將狀態設定為可以**

@override

public

void

deductmoney()

// 當前狀態不能**

@override

public

boolean

raffle()

// 當前狀態不能發放獎品

@override

public

void

dispenseprize()

}/**

* 獎品發放完狀態

* 當成為該狀態,則活動結束

* @author administrator

* */

public

class

dispenseoutstate

extends

state

@override

public

void

deductmoney()

@override

public

boolean

raffle()

@override

public

void

dispenseprize()

}// 測試類

狀態模式注意事項和細節說明

github:設計模式源**

設計模式之狀態模式

一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...

設計模式之 狀態模式

gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...

設計模式之狀態模式

定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...