您的位置:首页 > 其它

设计模式之状态模式

2015-05-29 00:00 260 查看
摘要: 软件的运行行为依赖于一组状态时,就可以应该用状态模式来进行更好的软件行为管理。

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

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: