設計模式-行爲性設計模式 狀態模式 State

狀態模式

一個對象 隨着外部的調用,自身會改變自身的狀態,狀態變化後可以展示出不同的行爲

節點進行自我管理


一個燈父類 還有一個枚舉燈顏色

 public enum Dengys
    {
        Hong,
        Lv,
        Huang
    }

    public abstract class Deng
    {
        public Dengys _Dengys;

        public Deng(Dengys dengys)
        {
            _Dengys = dengys;
        }

        public abstract void Change(Hld hld);
    }

紅綠燈類

 public class Hld
    {
        private Deng Dqdeng;//當前是什麼燈

        public Hld(Deng d)
        {
            Dqdeng = d;
        }

        public void Change()
        {
            Dqdeng.Change(this);
        }

        public void Set(Deng d)
        {
            Dqdeng = d;
        }

    }

紅燈類

 public class HongDeng:Deng
    {
        public HongDeng()
            :base(Dengys.Hong)//保存當前節點燈顏色
        { 
        
        }

        public override void Change(Hld hld)
        {
            Console.WriteLine("當前等顏色{0}馬上切換",base._Dengys);
            //切換到下一個燈
            hld.Set(new LvDeng());
        }
    }

綠燈類

public class LvDeng:Deng
    {
        public LvDeng()
            :base(Dengys.Lv)//保存當前節點燈顏色
        { 
        
        }

        public override void Change(Hld hld)
        {
            Console.WriteLine("當前等顏色{0}馬上切換",base._Dengys);
            hld.Set(new HuangDeng());
        }
    }
黃燈類

 public class HuangDeng:Deng
    {
        public HuangDeng()
            :base(Dengys.Huang)//保存當前節點燈顏色
        { 
        
        }

        public override void Change(Hld hld)
        {
            Console.WriteLine("當前等顏色{0}馬上切換",base._Dengys);
            hld.Set(new HongDeng());
        }
    }

調用

 Hld hld = new Hld(new LvDeng());
            hld.Change();
            hld.Change();
            hld.Change();
            hld.Change();
            hld.Change();
            hld.Change();
            hld.Change();
            hld.Change();

結果


發佈了72 篇原創文章 · 獲贊 2 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章