設計模式之狀態模式

2021-10-05 17:36:56 字數 4505 閱讀 8082

1.什麼是狀態模式

狀態模式就是把所有研究物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的子類。意圖是乙個物件在內部狀態改變的時候,行為也改變。

2.狀態模式的優缺點

優點:

缺點:

3.uml圖

4.狀態模式示例

設計如下兩個狀態轉換的狀態模式:

狀態模式結構如下:

1.抽象上下文角色(context):維護當前狀態並將與狀態相關的操作委託給當前狀態物件處理

2.具體上下文(concrete context):實現具體上下文的管理

3.抽象狀態角色(state):定義乙個狀態介面,共性的方法放入介面中

4.具體狀態(concrete state):實現具體狀態對應的行為

state介面及其派生類:

//狀態介面

public

inte***ce

entrystate

public

class

waiting

implements

entrystate

@override

public string tostring()

@override

public

boolean

allocate

(context context)

@override

public

boolean

run(context context)

@override

public

boolean

end(context context)

@override

public

boolean

cancel

(context context)

}

public

class

allocated

implements

entrystate

@override

public string tostring()

@override

public

boolean

allocate

(context context)

@override

public

boolean

run(context context)

@override

public

boolean

end(context context)

@override

public

boolean

cancel

(context context)

}

public

class

running

implements

entrystate

@override

public string tostring()

@override

public

boolean

allocate

(context context)

@override

public

boolean

run(context context)

@override

public

boolean

end(context context)

@override

public

boolean

cancel

(context context)

public

boolean

block

(blockedcontext context)

return

false;}

}

public

class

cancelled

implements

entrystate

@override

public string tostring()

@override

public

boolean

allocate

(context context)

@override

public

boolean

run(context context)

@override

public

boolean

end(context context)

@override

public

boolean

cancel

(context context)

}

public

class

ended

implements

entrystate

@override

public string tostring()

@override

public

boolean

allocate

(context context)

@override

public

boolean

run(context context)

@override

public

boolean

end(context context)

@override

public

boolean

cancel

(context context)

}

public

class

blocked

implements

entrystate

@override

public string tostring()

@override

public

boolean

allocate

(context context)

@override

public

boolean

run(context context)

@override

public

boolean

end(context context)

@override

public

boolean

cancel

(context context)

public

boolean

unblock

(blockedcontext context)

return

false;}

}

context介面及其派生類:

public

inte***ce

context

public

class

unblockedcontext

implements

context

@override

public entrystate getstate()

@override

public

boolean

allocate()

@override

public

boolean

run(

)@override

public

boolean

cancel()

@override

public

boolean

end(

)}

public

class

blockedcontext

extends

unblockedcontext

/** * change the state to running

* * @return true if change successfully, else false

*/public

boolean

unblock()

}

設計模式之狀態模式

一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...

設計模式之 狀態模式

gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...

設計模式之狀態模式

定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...