設計模式從入門到放棄 二十 狀態模式

2021-10-06 03:47:16 字數 1776 閱讀 8893

狀態模式 state pattern 屬於行為模式,主要用來解決物件在多狀態切換時,需要對外輸出不同行為的問題。狀態和行為一一對應,狀態之間可以相互轉換。使用場景在於**中有大量對物件狀態相關的判斷的條件語句的時候較為適合。

context 上下文物件 用於維護state的例項 維護當前的狀態

state 狀態抽象介面 封裝了跟物件相關的一系列行為

concretestate 具體的狀態角色,子類可以根據需要根據不同的狀態實現自己的處理行為

類似**活動一樣,**的活動主要有3個步驟 消耗**次數deduce **raffle 兌換獎品dispense相當於state中的抽象行為,狀態可以分為可以**狀態,發獎品狀態,不可**狀態,獎品發放完畢狀態,對於不同的狀態對以上3個行為的實現邏輯都不同

// 抽象狀態介面 封裝了乙個物件所有的行為 如**活動 有3個行為 扣積分 ** 發獎3個行為

public

inte***ce

state

// 抽象狀態實現 所有方法都是空實現 為了讓子類繼承子類根據自己需要實現自己的方法

public

class

abstractstate

implements

state

@override

public

void

deduce()

@override

public

void

raffle()

@override

public

void

dispense()

}

// 不能**狀態

public

class

norafflestate

extends

abstractstate

@override

public

void

deduce()

}

// 可以**狀態 只需要實現raffle**方法即可

public

class

canrafflestate

extends

abstractstate

@override

public

void

raffle()

else

}}

// 獎品發放狀態

public

class

dispensestate

extends

abstractstate

@override

public

void

dispense()

else

}}

// 活動物件 context 

public

class

raffleactivity

public state getcurrentstate()

public

void

setcurrentstate

(state currentstate)

public

void

play()

}

public

class

statetest

}}

設計模式從入門到放棄 二十一 策略模式

策略模式 strategy pattern 屬於行為型設計模式,將呼叫演算法和演算法本身分離解耦,讓乙個類的行為或者演算法可以執行的時候更改。具體的使用類只需要組合演算法的介面,演算法的具體實現留給子類實現,然後具體使用哪種演算法可以動態的指定。context 上下文物件 演算法具體的使用者 組合演...

設計模式從入門到放棄 四 原型模式

實現cloneable介面 最簡單的原型實現 這裡不能直接用lombok data 因為 data重寫了hashcode方法導致clone出來的hashcode一樣 setter getter tostring public class prototypeclass implements clone...

設計模式從入門到放棄 十九 直譯器模式

直譯器模式 interpreter pattern 屬於行為模式,根據給定的語言表示式,選擇定義的直譯器,使用不同的直譯器來解析表示式得到最終的結果。類似的設計模式在sql解析,正規表示式,計算器,編譯器,模板引擎等大量使用。context 環境上下文 儲存除直譯器外的全域性資訊 abstracte...