設計模式系列
目的:將物件狀態封裝成類別,此物件隨者狀態改變時有不同的行為。
Context(環境類):環境類又稱為上下文類,它是擁有多種狀態的物件。由於環境類
的狀態存在多樣性且在不同狀態下物件的行為有所不同,因此將狀態獨立出去形成單獨
的狀態類。在環境類中維護一個抽象狀態類 State 的例項,這個例項定義當前狀態,在具
體實現時,它是一個 State 子類的物件。
State(抽象狀態類):它用於定義一個介面以封裝與環境類的一個特定狀態相關的行為,
在抽象狀態類中聲明瞭各種不同狀態對應的方法,而在其子類中實現類這些方法,由於不
同狀態下物件的行為可能不同,因此在不同子類中方法的實現可能存在不同,相同
的方法可以寫在抽象狀態類中。
ConcreteState(具體狀態類):它是抽象狀態類的子類,每一個子類實現一個與環境類
的一個狀態相關的行為,每一個具體狀態類對應環境的 一個具體狀態,不同的具體狀態類
其行為有所不同。
使用場景:
- 行為隨者狀態來改變場景
- 條件與分支的替代者
class Program
{
static void Main(string[] args)
{
Context c = new Context(new ConcreteStateA());
c.Request();
c.Request();
c.Request();
c.Request();
}
}
class Context
{
private State state;
public Context(State state)
{
this.state = state;
}
public State State
{
get { return state; }
set
{
state = value;
Console.WriteLine("當前狀態:" + state.GetType().Name);
}
}
public void Request()
{
state.Handle(this);
}
}
abstract class State
{
public abstract void Handle(Context context);
}
class ConcreteStateA:State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateB();
}
}
class ConcreteStateB : State
{
public override void Handle(Context context)
{
context.State = new ConcreteStateA();
}
}
元哥的筆記