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的乙個特...