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();
        }
    }
}

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

  1. 重学 Java 设计模式:实战状态模式「模拟系统营销活动,状态流程审核发布上线场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! @ 目录 一.前言 二.开发环境 三.状态模式介绍 四.案例场景模拟 1 ...

  2. 《大话》之 策略模式 Vs 状态模式

    一.简介: 策略模式: 背景:商店要打折销售,各种版本的销售方式,让小菜心烦意乱 内容:    定义算法家族,分别封装起来,让他们之间可以户型替换,此模式让算法的变化,不会影响到使用算法的用户. 图文 ...

  3. State Pattern -- 状态模式原理及实现(C++)

    主要参考<大话设计模式>和<设计模式:可复用面向对象软件的基础>两本书.本文介绍命令模式的实现. 问题出发点 在实际开发中,我们经常会遇到这种情况:一个对象有多种状态,在每一个 ...

  4. javascript设计模式学习之十六——状态模式

    一.状态模式的定义 状态模式的关键是区分事务内部和外部的状态,事务内部状态改变往往会带来事务的行为改变. 状态模式中有意思的一点是,一般我们谈到封装,都是优先封装对象的行为,而非对象的状态.但在状态模 ...

  5. 职责链模式vs状态模式区别

    状态模式在具体状态里设置了下一状态. 而职责链模式是在客户端代码里设置了下一状态的处理对象. 如果状态模式里的任何一环缺失,将导致事情无法进行下去.职责链模式的链式在客户端连接的,也就是说,如果我们请 ...

  6. 设计模式--状态模式(分布式中间件熔断器Java实现)

    最近在做分布式服务熔断,因为要实现一个熔断器状态机,所以想到状态模式.状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类.状态模式主要解决的是当控制一个对象状态的条件表达 ...

  7. 再起航,我的学习笔记之JavaScript设计模式19(状态模式)

    状态模式 概念介绍 状态模式(State):当一个对象的内部状态发生改变时,会导致其行为的改变,这看起来像是改变了对象 示例演示 在我们写项目的过程中或多或少会遇到如下的多分支判断 function ...

  8. JAVA设计模式:状态模式

    声明:转载请说明来源:http://www.cnblogs.com/pony1223/p/7518226.html 一.引出状态模式 假设我们现在有一个糖果机项目,那么我们知道正常一般糖果机提供给用户 ...

  9. 状态模式、职责链模式——省去if-else的繁琐结构

    小时候写日记都是这么写的:上午七点起床,八点之前洗脸刷牙吃早饭,十二点之前好好上课,中午一点,吃午饭,下午两点到六点,上课,下课,找请假,明天妈妈要带我去姥姥家,九点之前,看动画片,九点钟,收拾去姥姥 ...

随机推荐

  1. WIN 10环境下JDK的安装和环境配置

    在做测试的过程中,诸如Selenium.Appium.Macaca.Airtest.RobotFramework.Jmeter等框架或工具都需要用到一样基础的环境JAVA JDK.最近刚好换了电脑,就 ...

  2. MyBatis_Study_002(进阶,增删改查)

    源码:https://github.com/carryLess/mbtsstd-002.git 1.主配置文件 <?xml version="1.0" encoding=&q ...

  3. k8s PersistentVolume hostpath 简单使用

    kubernets host PersistentVolume 测试 因为yaml 格式的问题 ,我修改为了json 创建 pv pv.json { "kind": "P ...

  4. 机器学习 ----Tensorflow

    机器学习笔记4-Tensorflow线性模型示例及TensorBoard的使用 机器学习笔记3-Tensorflow简介 机器学习笔记2 – sklearn之iris数据集 机器学习笔记1 - Hel ...

  5. Tomcat 7 可以修改 Session 默认的 Cookie 名 JSESSIONID 了

    Tomcat 7 可以修改 Session 默认的 Cookie 名 JSESSIONID 了       程序员必上的开发者服务平台 —— DevStore 看看下面这个配置: <Contex ...

  6. CentOS之NTP服务器配置

    本文使用CentOS 6.5作为搭建环境 一.服务器端配置 1.安装所需软件包 yum -y install ntp ntpdate---------------------------------- ...

  7. The type org.springframework.context.support.AbstractApplicationContext cannot be resolved

    在 myeclipse中,使用 jdk6和7,并使用 spring-framework-5.0.2.RELEASE 时,编写代码: import org.springframework.context ...

  8. selenium+python 移动鼠标方法

    from selenium import webdriver from selenium.webdriver.common.keys import Keys import time driver=we ...

  9. PHP实现连接设备、通讯和发送命令的方法

    这篇文章主要介绍了PHP实现连接设备.通讯和发送命令的方法,涉及php基于socket实现设备连接及数据通信的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下   本文实例讲述了PHP实现连接设备 ...

  10. windows8.1中组件服务DCOM配置里属性灰色不可修改的解决办法

    由于电脑升级,更换成了windows8.1的64位操作系统,今天遇到组件服务中DCOM配置里IIS Admin Service属性呈现灰色,不能修改. 查找官方文档,原来这是win8.1 x64的安全 ...