设计模式-行为性设计模式 状态模式 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();

结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值