设计模式之状态模式

自动贩卖机示例,有不可用状态、选择物品状态。(投币之后进入选择物品状态)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StatePattern
{
    interface IState
    {
          void Handle(CoinMachine context);
    }
}

不可用状态:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StatePattern
{
    /// <summary>
    /// 自动贩卖机刚开始未投币是不可用状态
    /// </summary>
    class NotAviliableState:IState
    {
        public void Handle(CoinMachine context)
        {
            Console.WriteLine("当前状态是 不可用.");
            context.state = new WaitingChoseState();
        }
    }
}

选择物品状态:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StatePattern
{
    /// <summary>
    /// 投完币可以进行货物选择啦
    /// </summary>
    class WaitingChoseState:IState
    {
        public void Handle(CoinMachine context)
        {
            Console.WriteLine("当前状态是 选择物品.");
            context.state = new NotAviliableState();
        }
    }
}

投币机:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StatePattern
{
    class CoinMachine
    {
        public IState state;

        public CoinMachine(IState state)
        {
            this.state = state;
        }

        public void Request()
        {
            state.Handle(this);
        }

        public void Coin()
        {
            state.Handle(this);
            Console.WriteLine("投了个币");
        }

        public void Chose()
        {
            state.Handle(this);
            Console.WriteLine("选了个货");
        }

       
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StatePattern
{
    class Program
    {
        static void Main(string[] args)
        {
            CoinMachine cm = new CoinMachine(new NotAviliableState());
            cm.Coin();
            cm.Chose();
            Console.ReadLine();
        }
    }
}


你可能感兴趣的:(设计模式之状态模式)