定義
當乙個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類。
類圖
state
抽象狀態角色
介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換。
concretestate
具體狀態角色
每乙個具體狀態必須完成兩個職責:本狀態的行為管理以及趨向狀態處理,通俗地說,就是本狀態下要做的事情,以及本狀態如何過渡到其他狀態。
context
環境角色
定義客戶端需要的介面,並且負責具體狀態的切換。
實現抽象狀態角色:
具體狀態角色:package com.sigalhu.statepattern;
public
abstract
class
state
//行為1
public
abstract
void
handle1();
//行為2
public
abstract
void
handle2();
}
package com.sigalhu.statepattern;
public
class
concretestate1
extends
state
@override
public
void
handle2()
}
環境角色:package com.sigalhu.statepattern;
public
class
concretestate2
extends
state
@override
public
void
handle2()
}
場景類:package com.sigalhu.statepattern;
public
class
context
//設定當前狀態
public
void
setcurrentstate(state currentstate)
//行為委託
public
void
handle1()
public
void
handle2()
}
優點 缺點package com.sigalhu.statepattern;
public
class
client
}
如果完全使用狀態模式就會有太多的子類,造成類膨脹,不好管理。
注意狀態模式適用於當某個物件在它的狀態發生改變時,它的行為也隨著發生比較大的變化,也就是說在行為受狀態約束的情況下可以使用狀態模式,而且使用時物件的狀態最好不要超過5個。
原始碼:
《設計模式之禪》讀書筆記 策略模式
策略模式 strategy pattern 定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換。對於策略模式來說了解清楚它三個角色的作用,基本就差不多了。策略模式的三個角色 它也叫做上下文角色,起承上啟下封裝作用,遮蔽高層模組對策略 演算法的直接訪問,封裝可能存在的變化。策略 演算法家族...
《設計模式之禪》讀書筆記 12 裝飾模式
定義 裝飾模式可以動態地給乙個物件新增一些額外的職責。類圖 component抽象構件 component是乙個介面或者是抽象類,就是定義我們最核心的物件,也就是最原始的物件。concretecomponent具體構件 concretecomponent是最核心 最原始 最基本的介面或抽象類的實現。...
設計模式之禪讀書筆記 建立類模式
23種設計模式可以分為三大類.建立類,結構類,行為類.建立類模式 都能夠提供物件的建立和管理職責 單例模式 保持在記憶體中只有乙個物件 工廠方法模式 抽象工廠模式 建造者模式 原型模式 通過複製的方式產生乙個新的物件 單例模式 定義 確保單例類只有乙個例項,而且自行例項化並向整個系統提供這個例項.優...