zoukankan      html  css  js  c++  java
  • 《大话设计模式》学习笔记12:状态模式

      

      

    工作状态示例:

      

    1.State:

        public abstract class State
        {
            public abstract void WriteProgram(Work work);
        }

    2.ConcreteState(以ForenoonState、NoonState、SleepingState为例):

        public class ForenoonState:State
        {
            public override void WriteProgram(Work work)
            {
                if(work.Hour<12)
                {
                    Console.WriteLine("当前时间:{0} 上午工作,精神百倍", work.Hour);
                }
                else
                {
                    work.SetState(new NoonState());
                    work.WriteProgram();
                }
            }
        }
        public class NoonState:State
        {
            public override void WriteProgram(Work work)
            {
                if(work.Hour<13)
                {
                    Console.WriteLine("当前时间:{0} 饿了,午饭;犯困,午休", work.Hour);
                }
                else
                {
                    work.SetState(new AfterNoonState());
                    work.WriteProgram();
                }
            }
        }
        public class SleepingState:State
        {
            public override void WriteProgram(Work work)
            {
                Console.WriteLine("当前时间:{0} 太困了,睡着了", work.Hour);
            }
        }

    3.Content:

        public class Work
        {
            private State state;
            public Work()
            {
                state = new ForenoonState();
            }
            public int Hour { get; set; }
            public void SetState(State state)
            {
                this.state = state;
            }
            public void WriteProgram()
            {
                state.WriteProgram(this);
            }
        }

    4.客户端代码:

        class Program
        {
            static void Main(string[] args)
            {
                Work work = new Work();
                work.Hour = 9;
                work.WriteProgram();
                work.Hour = 12;
                work.WriteProgram();
                work.Hour = 19;
                work.WriteProgram();
            }
        }

      状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。

  • 相关阅读:
    [NOIP2017]宝藏 子集DP
    [NOI2017]蔬菜 贪心
    hihoCoder#1698 : 假期计划 组合数
    KNIGHTS
    动态图连通性(线段树分治+按秩合并并查集)
    CF868F Yet Another Minimization Problem 分治决策单调性优化DP
    【POJ】【3308】Paratroopers
    【BZOJ】【3437】小P的牧场
    【BZOJ】【3156】防御准备
    【BZOJ】【1010】【HNOI2008】玩具装箱Toy
  • 原文地址:https://www.cnblogs.com/walden1024/p/4508946.html
Copyright © 2011-2022 走看看