状态模式c#(状态流转例子吃饭)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 状态模式
{
public interface State
{
void doSomething(Person p);
}
public class Mstate : State
{
public void doSomething(Person p)
{
if (p.hours == 7)
{
Console.WriteLine("吃早餐");
}
else
{
p.state = new Lstate();
p.doSomething();
}
}
}
public class Lstate : State
{
public void doSomething(Person p)
{
if (p.hours == 12)
{
Console.WriteLine("吃午餐");
}
else
{
p.state =new Nstate();
p.doSomething();
}
}
}
public class Nstate : State
{
public void doSomething(Person p)
{
if (p.hours == 18)
{
Console.WriteLine("吃晚餐");
}
else
{
p.state =new NOstate();
p.doSomething();
}
}
}
public class NOstate : State
{
public void doSomething(Person p)
{
Console.WriteLine("没得吃");
}
}
public class Person
{
public State state { get; set; }
public int hours { get; set; }
public Person()
{
state=new Mstate();
}
public void doSomething()
{
state.doSomething(this);
state=new Mstate();
}
}
class Program
{
static void Main(string[] args)
{
Person p=new Person();
p.hours = 7;
p.doSomething();
p.hours = 12;
p.doSomething();
p.hours = 18;
p.doSomething();
p.hours = 8;
p.doSomething();
p.hours = 7;
p.doSomething();
Console.ReadKey();
}
}
}
最新文章
- 最常用的截取函数有left,right,substring
- 写一个函数,将一个int型的数组做为参数传入,使用指针返回两个结果:最大值和最小值
- A Case Study -- Performance Evaluation of a DRAM-Based Solid State Disk
- jsp文件怎么打开呢
- OD: Ring0 &; Kernel
- 【转】在ubuntu12.04中安装wine和sourceinsight
- Mirror–使用证书配置镜像模板
- 浅谈JavaScript的apply和call语句
- Linux系统打开文件最大数量限制(进程打开的最大文件句柄数设置)
- swift-UIPickerView(选择控件)
- [转]分别使用Node.js Express 和 Koa 做简单的登录页
- 增删改查的SSM小项目
- 在Power BI报表和仪表板中显示刷新日期\时间
- 10.2.0.5环境dg测试logminer挖掘日志分析
- 利用PHPExcel读取excel文件
- mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下)
- Oracle Data Guard 重要配置参数
- python基础之if语句
- win10中打开SQL Server配置管理器方法
- 【Leetcode】445. Add Two Numbers II