狀態模式
一個對象 隨着外部的調用,自身會改變自身的狀態,狀態變化後可以展示出不同的行爲
節點進行自我管理
一個燈父類 還有一個枚舉燈顏色
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();
結果