状态模式
一个对象 随着外部的调用,自身会改变自身的状态,状态变化后可以展示出不同的行为
节点进行自我管理
一个灯父类 还有一个枚举灯颜色
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();
结果