狀態模式 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...