十八 狀態模式

2022-02-25 20:14:28 字數 1930 閱讀 7796

狀態模式:

state:當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。

狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。

把狀態的判定邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。

demo

//維護乙個concretestate子類的例項,定義當前的狀態

class context

private state state;

public context(state state)//定義context的初始狀態

this.state = state;

public state state//讀寫當前狀態和設定新狀態

get

set

state = value;

console.writeline("當前狀態:"+state.gettype().name);

//對請求做處理,並設定一下狀態

public void request()

state.handle(this);

abstract class state

public abstract void handle(context context);

classconcretestatea : state

}class concretestateb : state

public override void handle(context context)

context.state = new concretestatea();//設定下一狀態

classprogram

static void main(string args)

context c = new context(new concretestatea());

c.request();

c.request();

c.request();

c.request();

console.readkey();

demo2:

public class work

private state current;

public work()

current = new forenoonstate();

private double hour;

public double hour

get

set

private bool finish = false;

public bool taskfinished

get

set

public void setstate(state s)

current = s;

public void writeprogram()

current.writeprogram(this);

public abstract class state

public abstract void writeprogram(work w);

public class forenoonstate : state//上午工作狀態

public override void writeprogram(work w)

if (w.hour < 12)

else

w.setstate(new noonstate());

w.writeprogram();

work w = new work();

w.hour=1;

w.writeprogram();

w.hour=2;

w.writeprogram();

設計模式學習 十八 狀態模式

當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。include using namespace std class light class...

設計模式(十八) 狀態變化模式 memento

狀態變化模式包括 state和memento 備忘錄 在元件構建過程中,某些物件的狀態經常面臨變化,如何對這些變化進行有效的管理,又同事維持高層模組的穩定?軟體構建過程中,某些物件狀態轉換過程中,如果想回溯到之前的狀態,又不想暴露實現細節。乙個程式有在每個時候擁有的序列號都是不同的,代表他這個時候的...

職責鏈模式(十八)

職責鏈模式 使多個物件都有機會處理請求,從而避免請求的傳送者和接收者之間的耦合關係。將這個物件連成一條鏈,並沿著這條鏈處理請求,直到有乙個物件處理它為止。這裡發出這個請求的客戶端並不知道這當中的哪乙個物件最終處理這個請求,這樣系統的更改可以不在影響客戶端的情況下動態地重新組織和分配責任。職責鏈模式 ...