状态模式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();
        }
    }
}

时间: 2024-10-08 03:29:21

状态模式c#(状态流转例子吃饭)的相关文章

《软件架构与设计模式》关于 状态模式 的一个小例子

作业题目 1.画UMl图 2.写代码 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace 状态{ class Program { static void Main(string[] args) { Club account = new Club("张三", 0); Console.WriteLin

大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 责任链模式概念和例子 使用的条件 和状态模式的比较分析 责任链的优缺点 纯的责任链和不纯的责任链 javax.servlet.Filter#doFilter()方法源码分析 基于AOP思想,模拟一个拦截器 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂业务逻辑判断的,那么他们有什么不同呢?回忆状态模式——状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象

状态模式

使用场景 业务中比较多的状态,不同状态下需要做的事情不同.这样,每个步骤中都需要判断一下当前属于什么状态,状态过滤完成以后对相应的状态作出处理.当前状态执行完成以后,可能需要根据条件进入下一个状态(可能是下一个状态,可能是上一个状态,可能是终止或者回到初始状态等).这种逻辑判断完以后一般都会出现比较多的if...else或者switch...case.最可怕的是后面如果加入一个状态或者修改状态相应的处理动作,这样就比较麻烦了.状态模式通过把状态拆分成不同的状态类来拆解条件.这样,在以后改变需求时

设计模式-状态模式(State Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 状态模式简介 状态模式允许一个对象在其内部状态改变的时候改变它的行为,他的内部会存着好几种状态,在当前状态发生变化是,这个对象执行和之前相同的操作也会有不同的作用效果. 状态模式的定义和基本结构 定义:状态模式允许一个对象在其内部状态改变的时候改变它的行为,就像变成了另一个对象一样. 一张来自<Head First>的结构图 Context:这个类里面包含了很多种状态类,当前状态不同时,这个

策略模式的孪生兄弟——对状态模式的深度复习总结

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 和策略模式的比较 状态模式概念和例子 应用场景 责任链模式和状态模式对比 一种代码优化的思路 java.util.Iterator里也有状态模式的影子 状态模式的优缺点 有限状态机及其应用 前面有总结——策略模式,之前早就觉得策略和状态设计模式有一些相似…… 接口的常用用法都有什么?策略设计模式复习总结 我知道策略模式是对象的行为模式,其实就是对一系列级别平等的算法的封装,它不关心算法实现,让客户端去动态的

JAVA设计模式:状态模式

声明:转载请说明来源:http://www.cnblogs.com/pony1223/p/7518226.html 一.引出状态模式 假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户的行为有这么几种:投入硬币.转动曲柄.退出硬币几种行为:那么糖果机呢一般有这几中状态,待机状态.持有硬币的准备状态.运行状态即正在售出状态和初始状态 这么几种正常状态. 我们发现处于不同状态的时候,持有的行为是不一样的,图如下: 如果我们采用传统的方法来写代码,那么在投入硬币这个行为操作的时候,我们

C++设计模式之状态模式(一)

在阐述状态模式之前,先来看一个例子.一个银行取款问题: 如果账户余额大于0,则正常取款:如果余额在-2000和0之间,则透支取款:如果余额小于-2000,则账户处于冻结状态,无法进行取款操作. 实现代码如下: //银行账户 class Account { private: //余额 int m_nBalance; public: //取款操作 void WithDraw() { if( m_nBalance > 0 ) { cout << "正常取款状态" <&

【游戏设计模式】之三 状态模式、有限状态机 &amp; Unity版本实现

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/52824776 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 游戏开发过程中,各种游戏状态的切换无处不在.但很多时候,简单粗暴的if else加标志位的方式并不能很地道地解决状态复杂变换的问题,这时,就可以运用到状态模式以及状态机来高效地完成任务.状态模式与状态机,因为他们关联紧密,常

第22章 行为型模式—状态模式

1. 状态模式(State Pattern)的定义 (1)定义:允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. ①状态和行为,它们的关系可以描述为“状态决定行为” ②因状态是在运行期被改变,行为也会在运行期根据状态的改变而改变.看起来,同一个对象,在不同的运行时刻,行为是不一样的,就像是类被修改了一样. (2)状态模式的结构和说明 ①Context:环境,也称上下文,通常用来定义客户感兴趣的接口,同时维护一个来具体处理当前状态的实例对象. ②State:状态接口,用来封