原始碼位址
狀態模式: 同樣行為在不同狀態下,能呼叫不同邏輯
例子:
自己qq狀態
事件結果
你發資訊
離線你發資訊
提示你傳送成
注意: 我舉得這個例子 情況比較少,假設有100種可能呢
一直寫if else 1 2 3 4 5 用來區分執行不同邏輯?
假設我們有個訂單,可能會動態新增狀態狀態,且訂單狀態之間變更規律也是動態的,狀態分:可以切換,不可以切換,不可以切換的時候,不執行任何操作(或者報錯), 可以切換的,執行的業務邏輯不一樣
訂單類
public
class
order
public
order
(long id, string orderno, integer orderstate)
public long getid()
public
void
setid
(long id)
public string getorderno()
public
void
setorderno
(string orderno)
public integer getorderstate()
public
void
setorderstate
(integer orderstate)
}
state介面
public
inte***ce
orderstate
state的實現類
public
class
waitpaystate
implements
orderstate
@override
public
void
change
(order order, integer state)
}public
class
initiatepaystate
implements
orderstate
@override
public
void
change
(order order, integer state)
}
context設計
public
class
orderstatecontext
implements
orderstate
@override
public
boolean
ischange
(order order, integer state)
@override
public
void
change
(order order, integer state)
}
演示類
public
class
demo
if(context.
ischange
(order,2))}}
演示結果
碼雲
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之 狀態模式
gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...
設計模式之狀態模式
定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...