1. 程式人生 > 其它 >CSS3選擇器、邊框、背景

CSS3選擇器、邊框、背景

編輯說明

概述

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

類的行為是基於它的狀態改變的。

結構圖

程式碼實現

狀態

    /// <summary>
    /// 抽象狀態類
    /// </summary>
    public abstract class State
    {
        public abstract void Handle(Context context);
    }
    /// <summary>
    /// 具體狀態A
    /// </summary>
    public class ConcreteStateA : State
    {
        
public override void Handle(Context context) { context.State = new ConcreteStateB(); } }
    /// <summary>
    /// 具體狀態B
    /// </summary>
    public class ConcreteStateB : State
    {
        public override void Handle(Context context)
        {
            context.State 
= new ConcreteStateA(); } }

上下文

    /// <summary>
    /// 上下文類,其中包含要維護的狀態
    /// </summary>
    public 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); } }

客戶端

    class Program
    {
        static void Main(string[] args)
        {
            Context c = new Context(new ConcreteStateA());
            c.Request();
            c.Request();
            c.Request();
            c.Request();
            Console.Read();
        }
    }

執行結果

優勢

封裝了轉換規則。

列舉可能的狀態,在列舉狀態之前需要確定狀態種類。

將所有與某個狀態有關的行為放到一個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。

允許狀態轉換邏輯與狀態物件合成一體,而不是某一個巨大的條件語句塊。

可以讓多個環境物件共享一個狀態物件,從而減少系統中物件的個數。

使用場景

物件的行為依賴於它的狀態(屬性),並且可以根據它的狀態改變而改變它的相關行為。

當控制一個物件狀態的轉換條件表示式過於複雜的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。

缺陷

Demo