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

        }
    }
时间: 2024-09-11 18:30:17

状态模式(Statue)的相关文章

状态模式(state pattern) 详解

状态模式(state pattern): 允许对象在内部状态改变时改变它的行为, 对象看起来好像修改了它的类. 建立Context类, 包含多个具体状态(concrete state)类的组合, 根据状态的不同调用具体的方法, state.handle(), 包含set\get方法改变状态. 状态接口(state interface), 包含抽象方法handle(), 具体状态类(concrete state)继承(implement)状态类(state), 实现handle()方法; 具体方法

设计模式(8)-状态模式(关注状态之间的变化)

状态模式(State Pattern)是设计模式的一种,属于行为模式. 定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化. 意图:允许一个对象在其内部状态改变时改变它的行为 适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为. 2.一个操作中含有庞大的多分

php设计模式 State (状态模式)

复制代码 代码如下: <?php /** * 状态模式 * * 允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它所属的类 * */ interface State { public function handle($state); public function display(); } class Context { private $_state = null; public function __construct($state) { $this->setState($

状态模式(state pattern) 未使用状态模式详解

状态模式可以控制状态的转换, 未使用设计模式时, 程序会非常繁杂. 具体方法: 1. 状态转换类. /** * @time 2014年7月11日 */ package state; /** * @author C.L.Wang * */ public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; fin

传统设计模式(十)状态模式

谈到状态模式我们在这里所谈论的是一个通用的技巧:如何对对象内的状态建模----通过创建一个实例变量来持有状态值,并在方法内书写条件代码来处理不同状态.我们要把一个状态的所有行为放在一个类中.这么一来我们将行为局部化了,并使得事情更容易改变和理解. 虫子还是拿订单系统来说事了 /// <summary> /// 状态接口 /// </summary> public interface SimpleState { //检查购物车 void CheckCart(); //检查账号 voi

hand first设计模式 -状态模式

状态模式:允许对象在内部状态改变时改变它的的行为.对象看起来好像修改了化的类. 将以超市购物为例--说明状态模式 所有状态抽象类 Java代码 public abstract class BuyStat { //在超市状态 public void inShop() { System.out.println("welcome come our shop,please start shoping"); } //选购商品状态 public void select() { System.out

.net设计模式实例之状态模式(State Pattern)

一.状态模式简介(Brief Introduction) 状态模式(State Pattern),当一个对象的内在状态改变时允许改变其行为,这个对象 看起来像是改变了其类. 二.解决的问题(What To Solve) 状态模式主要解决的是当控制一个对象状态装换的条件表达式过于复杂时的情况.把状态 的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化. 当一个对象行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为时,就可 以考虑使用状态模式了. 三.状态模式分析(Ana

【机房合作】状态模式与上机

在机房收费系统中,有几个业务逻辑是比较复杂的,比如说上机.下机.记得我在做第一版VB收费系统的时候,还特别地将上下机拿出来画了一个完整的流程图,要不这样做的话,最后的结果一定是懵了,也不想再继续写代码了. 在进行设计模式的学习之前,我们很有必要将上机这一业务逻辑完整的梳理一遍. 一.上机业务逻辑 1.判断卡号是否存在 2.判断卡号是否使用 3.判断卡号余额是否充足 4.判断卡号是否正在上机 5.执行上机,添加上机记录 这样一罗列,很明显,执行上机这一业务操作需要先经过四次判断.之前我们都是通过一

深入理解JavaScript系列(43):设计模式之状态模式详解_基础知识

介绍 状态模式(State)允许一个对象在其内部状态改变的时候改变它的行为,对象看起来似乎修改了它的类. 正文 举个例子,就比如我们平时在下载东西,通常就会有好几个状态,比如准备状态(ReadyState).下载状态(DownloadingState).暂停状态(DownloadPausedState).下载完毕状态(DownloadedState).失败状态(DownloadFailedState),也就是说在每个状态都只可以做当前状态才可以做的事情,而不能做其它状态能做的事儿. 由于Stat