设计模式之状态模式
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(); } } }
相关文章推荐
- 使用redis做pv、uv、click统计
- jedis以pipeline方式调用redis
- Java过滤器与SpringMVC拦截器之间的关系与区别
- SpringMVC中使用Interceptor拦截器
- request获得所有参数
- 快速获取远程文件的大小
- activeMQ5官方文档翻译-初始化配置
- CentOS修改mysql编码
- servlet config 初始化参数
- 手游应用消费整合?
- python的subprocess模块
- TOOLS STORE OPENCART 2.X 主题模板 ABC-0628
- 支付宝担保交易接口
- 25个值得推荐的Ecplise插件大全以及安装方法(-)
- 25个值得推荐的Ecplise插件大全以及安装方法(二)
- Spring Integration
- http/https面试总结
- ABP总体介绍
- 使用一次性密码本通过 SSH 安全登录 Linux
- hdu 1757 和1005差不多 (矩阵快速幂)