允許乙個物件再其內部狀態改變時,改變它的行為。物件看起來似乎修改了它的類。
狀態物件(objects for states)
考慮乙個表示網路連線的類tcpconnection。乙個tcpconnection物件的狀態處於若干不同狀態之一:連線已建立(established)、正在監聽(listenling),連線已關閉(closed)。當乙個tcpconnection物件收到其他物件的請求時,它根據自身的當前狀態做出不同的反應。例如,乙個open請求的結果依賴於該連線是處於連線已關閉狀態還是連線已建立狀態。state模式描述了tcpconnection如何在每一種狀態下表現出不同的行為。
以下情況使用state模式:
state類是個狀態類,context類可以實現切換,我們來看看**::
實現**:
狀態結構:
package com.xtfggef.dp.state;
/** * 狀態類的核心類
* 2012-12-1
*@author erqing
* */
public
class
state
public
void
setvalue(string value)
public
void
method1()
public
void
method2()
}
實現:
package com.xtfggef.dp.state;
/** * 狀態模式的切換類 2012-12-1
*@author erqing
* */
public
class
context
public state getstate()
public
void
setstate(state state)
public
void
method() else
if (state.getvalue().equals("state2"))
}}
測試類:
public class test }
「` 輸出:
execute the first opt!
execute the second opt!
根據這個特性,狀態模式在日常開發中用的挺多的,尤其是做**的時候,我們有時希望根據物件的某一屬性,區別開他們的一些功能,比如說簡單的許可權控制等。
引用:
Behavioral模式之Iterator模式
提供一種方法順序訪問乙個集合物件中各個元素,而不需要暴露該物件的內部表示。cursor 游標 乙個聚合物件,如列表 list 應該提供一種方法來讓別人可以訪問它的元素,而又不需要暴露它的內部結構。資料庫中最常用的iterator模式。以下情況使用iterator模式 顧名思義,迭代器模式就是順序訪問...
Behavioral模式之Visitor模式
表示乙個作用於某物件結構中的各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。無考慮乙個編譯器,他將源程式表示為乙個抽象語法樹。該編譯器需要在抽象語法上實施某些操作以進行 靜態語義 分析,例如檢查是否所有的變數都已經被定義了。他也需要生成 因為它可能要定義許多操作以進行 ...
RMQ問題之ST演算法
st演算法 st演算法是用於解決rmq問題 區間最值問題 的一種強有力的工具。o nlogn 預處理,o 1 查詢最值,利用的是倍增的思想。但 但是,使用st演算法的條件是沒有修改操作,emmm 演算法流程 最大值為例 預處理 用f i j 表示,從i位置開始的2 j 個數中的最大值,例如f i j...