状态模式(Statue)

简介:        状态模式:当一个对象的内在状态改变时运行改变其行为,这个对象看起来像是改变了其类。 状态模式结构     状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。

 

     状态模式:当一个对象的内在状态改变时运行改变其行为,这个对象看起来像是改变了其类。


状态模式结构


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


适用性

 1,一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为.


2,一个操作中含有庞大的多分支的条件语句,且这些分支依赖于该对象的状态.这个状态通常用一个或多个枚举常量表示.通常,有多个操作包含这一相同的条件结构.State模式将每一个条件分支放入一个独立的类中。这使得你可以根据对象自身的情况将对象的状态作为一个对象,这一对象可以不依赖于其他对象而独立变化。

 

模式的好处

   将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。


示例

  灯泡有两种状态:亮和不亮,我们通过它的开关来切换它的状态。


       

    本例中状态只有两个,不能概括那种状态转换过于复杂的情况,但本例主要是用来表示状态模式的。

 

namespace 电灯的状态
{
 
    //抽象状态类
    abstract class LightState
    {
        public abstract void PressSwitch(Light light);  //按下按钮
    }

    //电灯打开状态类
    class LightOn : LightState
    {
        public override void PressSwitch(Light light)
        {
            
            light.State  = new LightOff();
            Console.WriteLine("电灯已关");
            
        }
    }

    //电灯关闭状态类
    class LightOff : LightState
    {
        public override void PressSwitch(Light light)
        {
            
            light.State = new LightOn();
            Console.WriteLine("电灯已开");

        }
    }

    //电灯类
    class Light
    {
        private LightState state;

        public LightState State
        {
            get { return state; }
            set { state = value; }
        }

        public Light(LightState state) //构造时设置初始状态
        {
            this.state = state;
        }

        public void PressLightSwitch()
        {
            state.PressSwitch(this);  //转换本类的状态
        }
    }




    class Program
    {
        static void Main(string[] args)
        {
            Light light = new Light(new LightOn());  //打开状态

            //反复开关。。。
            light.PressLightSwitch();
            light.PressLightSwitch();
            light.PressLightSwitch();
            light.PressLightSwitch();
            light.PressLightSwitch();


        }
    }



目录
相关文章
|
7月前
|
设计模式 算法
状态模式和策略模式有什么区别
状态模式和策略模式有什么区别
123 1
|
2月前
|
设计模式 算法 C#
C# 一分钟浅谈:策略模式与状态模式
【10月更文挑战第13天】本文介绍了两种常见的行为型设计模式:策略模式和状态模式。策略模式通过封装一系列算法并使其可互换,实现算法的灵活变化;状态模式则通过改变对象的内部状态来改变其行为。文章通过C#代码示例详细说明了这两种模式的应用场景、常见问题及解决方法。
54 19
|
7月前
|
设计模式 安全 C++
行为型 备忘录模式
行为型 备忘录模式
48 1
|
7月前
行为型 状态模式
行为型 状态模式
44 0
|
前端开发
状态模式
状态模式
48 0
|
设计模式 JavaScript
关于状态模式我所知道的
关于状态模式我所知道的
62 0
|
设计模式 算法 Java
状态模式和策略模式的区别与联系
UML 状态模式是策略模式的孪生兄弟,是因为它们的UML图是一样的。但意图却完全不一样,策略模式是让用户指定更换的策略算法,而状态模式是状态在满足一定条件下的自动更换,用户无法指定状态,最多只能设置初始状态。
|
设计模式
我学会了,状态模式
状态模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
116 0
我学会了,状态模式
|
存储 程序员 开发工具
状态模式与备忘录模式(2)
状态模式与备忘录模式(2)
146 0
状态模式与备忘录模式(2)