允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類
何時使用:**中包含大量與物件狀態有關的條件語句
如何解決:將各種具體的狀態類抽象出來
關鍵**:狀態模式的介面中有乙個或者多個方法
缺點:
注意事項:在行為受狀態約束的時候使用狀態模式,而且狀態不超過 5 個
state.hpp
main.cpp#ifndef _state_h_
#define _state_h_
#include
using
namespace std;
class
context
;class
state
virtual
~state()
virtual
void
operationinte***ce
(context* con)=0
;virtual
void
operationchangestate
(context*)=
0;protected
:bool
changestate
(context* con,state* st)
;private
://bool changestate(context* con,state* st); };
class
concretestatea
:public state
virtual
~concretestatea()
virtual
void
operationinte***ce
(context*
)virtual
void
operationchangestate
(context* con);}
;class
concretestateb
:public state
virtual
~concretestateb()
virtual
void
operationinte***ce
(context*
)virtual
void
operationchangestate
(context*);
};class
context
context
(state* state)
~context()
void
operationinte***ce()
void
operationchangstate()
private
:friend
class
state
;//表明在state類中可以訪問 context 類的 private 字段
bool
changestate
(state* state)
private
: state* _state;};
void state::
operationinte***ce
(context* con)
bool state::
changestate
(context* con,state* st)
void concretestatea::
operationchangestate
(context* con)
void concretestateb::
operationchangestate
(context* con)
#endif
#include
"state.h"
#include
using
namespace std;
intmain()
(行為型模式)State 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式允許乙個物件在其內部狀態改變的時候改變行為。這個物件看上去像是改變了它的類一樣。狀態模式把所研究的物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的乙個子類。狀態模式的意圖是讓乙個物件在其內...
行為型模式 8 狀態模式State
在很多情況下我們物件的行為依賴於它的乙個或者多個變化的屬性,這些可變的屬性我們稱之為狀態,也就是說行為依賴狀態,即當該物件因為在外部的互動而導致他的狀態發生變化,從而它的行為也會做出相應的變化。對於這種情況,我們是不能用行為來控制狀態的變化,而應該站在狀態的角度來思考行為,即是什麼狀態就要做出什麼樣...
設計模式 行為型模式
行為型模式用於描述程式在執行時複雜的流程控制,即描述多個類或物件之間怎樣相互協作共同完成單個物件都無法單獨完成的任務,它涉及演算法與物件間職責的分配。行為型模式分為類行為模式和物件行為模式,前者採用繼承機制來在類間分派行為,後者採用組合或聚合在物件間分配行為。由於組合關係或聚合關係比繼承關係耦合度低...