此範例共4個狀態,2種操作,沒用inte***ce而是用abstract修飾的class實現。
呼叫:
transserver ts = new transserver();
console.writeline(ts.stopserver());
console.writeline(ts.startserver());
console.writeline(ts.startserver());
console.writeline(ts.stopserver());
console.writeline(ts.stopserver());
實現:
internal abstract class state
internal class stoppedstate : state
/// /// stopped --> init --> worked or error or others.
///
///
public override errorcode startserver()
/// /// do nothing.
///
///
public override errorcode stopserver()
}internal class initstate : state
/// /// do nothing.
///
///
public override errorcode startserver()
/// /// do nothing.
///
///
public override errorcode stopserver()
}internal class workingstate : state
/// /// do nothing.
///
///
public override errorcode startserver()
/// /// worked --> stopped or error or others.
///
///
public override errorcode stopserver()
}internal class errorstate : state
public override errorcode startserver()
public override errorcode stopserver()
}public class transserver
state initstate;
internal state getinitstate()
state workingstate;
internal state getworkingstate()
state errorstate;
internal state geterrorstate()
state state;
/// /// 設定當前狀態
///
internal void setstate(state value)
/// /// 預設構造方法
///
public transserver()
public errorcode startserver()
public errorcode stopserver()
}
/// /// 錯誤碼
///
public enum errorcode
設計模式 狀態模式 C
狀態模式主要解決當控制乙個物件狀態的轉換的條件表達過於複雜的情況,使得狀態的轉換不依賴於整體的操作。本文將通過乙個具體的例子說明狀態模式的應用。假設下面乙個場景 乙個新任務提交後,先是收集資料,資料收集完成後等等分配一台機器,分配到機器後就可以將此任務部署至此機器後就可以通知相關模組開始工作。先對此...
設計模式 狀態模式 C
狀態模式是產生乙個可以改變其類的物件,通過前端物件狀態的變化來使後端工作的不同物件履行其職責。通過改變乙個物件的狀態,使它的工作物件也發生變化。如果乙個物件在決定它要做什麼之前總是要對當前的 狀態做很多的判斷,那麼就可以考慮使用狀態模式。乙個壞的例子 worker.h include ifndef ...
設計模式 狀態模式(c )
狀態模式適用於 乙個物件有多種狀態,在不同狀態下執行同一操作的行為是不同的。例如,檔案在read only write only write and read 狀態下,執行讀 寫等操作時的行為是不同的。狀態模式基本思想 用動態繫結 執行時繫結,多型,用虛函式實現 代替if else或switch,以...