美文网首页设计模式
设计模式 - 状态模式

设计模式 - 状态模式

作者: Mitchell | 来源:发表于2016-05-02 20:21 被阅读35次

一、概述

  • 状态模式,当一个对象的内在状态改变的时候允许改变其行为,这个对象看起来像是改变了其类。
  • 状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时候的情况。把状态的判断逻辑转移到表示不同状态的一系列类当中,可以把复杂的判断逻辑简单化。
  • 状态模式的好处
    将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。将特定的状态行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreateState中,所以通过定义新的子类可以很容易的增加新的状态和转换。这样做的母的是为了消除庞大的条件分支语句。状态模式通过把各种状态转移逻辑分布到 State 的子类之间,来减少相互间的依赖。

二、举例

  • 需求:
    根据工作事件来返回工作的状态。
//工作状态基类
class State
{
    public abstract void WriteProgram(Work w);
}
//上午工作状态类
public class ForennoonState :State
{
    public overridevoid WriteProgram (Work w)
    {
        if (w.Hour < 12)
        {
            Console.WriteProgram("当前时间:{0} 上午工作",w.Hour);
        }   
        else
        {
            w.SetState(new NoonState());
            w.WriteProgram();   
        }
    }
}
//下午工作状态类
public class  AfternoonState:State
{
    public override void WriteProgram (Work w)
    {
        if (w.TaskFinished)
        {
            w.SetState(new RestState());
            w.WriteProgram();
        }
        else
        {
            if (w.Hour < 21)
            {
            Console.WriteProgram("当前时间:{0} 午休",w.Hour);
            }else
            {
                w.SetState(new SleepingState());
                w.WriteProgram();
            }
        }
    }
}
//工作类
public class Work
{
    private State state;
    public Work()
    {
        current = new ForennoonState();
    }
    private double hour;
    public double Hour
    {
        get{return hour;}
        set{hour = value;}
    }
    private bool finish = false;
    public bool TaskFinished
    {
        get{return finish;}
        set{finish = value;}
    }
    public void setState(State s)
    {
        current = s;
    }
    public void WriteProgram()
    {
        current.WriteProgram(this);
    }
}
//客户端调用
static void Main(string[] args)
{
    Work m = new Work();
    m.Hour = 9;
    m.WriteProgram();
    m.Hour = 10;
    m.WriteProgram();
    m.Hour = 12;
    m.WriteProgram();
    m.Hour = 15;
    m.WriteProgram();
    m.Hour = 17;
    m.WriteProgram();
    m.TaskFinished = false;
    Console.Read();
}

相关文章

  • 设计模式-状态模式

    设计模式-状态模式 设计模式 状态模式的关键是区分事物内部的状态

  • 设计模式——状态模式

    设计模式——状态模式 在状态模式中,类的行为是基于它的状态改变的。这种类型的设计模式属于行为型模式。 优点: 减少...

  • 设计模式-状态设计模式

    1.定义 对于某个操作,由于其状态的不同,表现出的行为会不同(如遥控器进行音量增加的操作,在电视是开机状态下是可以...

  • 设计模式——状态模式

    前言 设计模式是指导一个程序猿以更好的姿态处理一些问题,而不再像刚学编程的我们,只会使用if-else分支语句,或...

  • 设计模式--状态模式

    基本常识:策略模式与状态模式是双胞胎,在出生时才分开。 假设公司有个糖果机,1当糖果机由糖果,投入25分钱,转动曲...

  • 设计模式——状态模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述状态(State)模式的:状态模式,又称状态对象模式(Patte...

  • 设计模式《状态模式》

    引言   上一节我们说了策略模式。这一节我们讲讲策略模式的双胞胎弟弟:状态模式,这个模式大家可能不常见,也不常用,...

  • 设计模式——状态模式

    定义 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行...

  • 设计模式 - 状态模式

    模式定义 允许一个对象在其内部状态发生改变时改变它的行为。对象看起来似乎修改了它的类。 状态模式(State Pa...

  • 设计模式 ——— 状态模式

    STATE(状态) ———— 对象行为型模式 意图 允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改...

网友评论

    本文标题:设计模式 - 状态模式

    本文链接:https://www.haomeiwen.com/subject/ciylrttx.html