class Program
{
static void Main(string[] args)
{
var state = new OpeningState();
var lift = new Lift();
lift.SetListState(state);
lift.Close();
lift.Open(); lift.Run();
lift.Stop();
Console.Read();
}
}
public abstract class LiftState
{
protected Lift Lift; public void SetLift(Lift lift)
{
this.Lift = lift;
}
public abstract void Open();
public abstract void Close();
public abstract void Run();
public abstract void Stop();
}
public class OpeningState : LiftState
{
public override void Open()
{
Console.WriteLine("电梯打开!");
} public override void Close()
{
base.Lift.SetListState(Lift.CloseingState);
base.Lift.Close();
} public override void Run()
{
Console.WriteLine("打开不能运行");
} public override void Stop()
{
base.Lift.SetListState(Lift.StopingState);
base.Lift.Stop();
}
}
public class ClosingState : LiftState
{
public override void Open()
{
base.Lift.SetListState(Lift.OpeningState);
base.Lift.Open();
} public override void Close()
{
Console.WriteLine("电梯关闭!");
} public override void Run()
{
base.Lift.SetListState(Lift.RuningState);
base.Lift.Open();
} public override void Stop()
{
base.Lift.SetListState(Lift.StopingState);
base.Lift.Stop();
}
}
public class RuningState : LiftState
{
public override void Open()
{
base.Lift.SetListState(Lift.OpeningState);
base.Lift.Open();
} public override void Close()
{
base.Lift.SetListState(Lift.CloseingState);
base.Lift.Close(); } public override void Run()
{
Console.WriteLine("电梯运行!");
} public override void Stop()
{
base.Lift.SetListState(Lift.StopingState);
base.Lift.Stop();
}
}
public class StopingState : LiftState
{
public override void Open()
{
base.Lift.SetListState(Lift.OpeningState);
base.Lift.Open();
} public override void Close()
{
base.Lift.SetListState(Lift.CloseingState);
base.Lift.Close();
} public override void Run()
{
base.Lift.SetListState(Lift.RuningState);
base.Lift.Open();
} public override void Stop()
{
Console.WriteLine("电梯停止!");
}
} public class Lift
{
public static LiftState OpeningState = new OpeningState();
public static LiftState CloseingState = new ClosingState();
public static LiftState RuningState = new RuningState();
public static LiftState StopingState = new StopingState(); private LiftState _liftState;
public LiftState GetState()
{
return this._liftState;
} public void SetListState(LiftState state)
{
this._liftState = state;
this._liftState.SetLift(this);
}
public void Open()
{
this._liftState.Open();
}
public void Close()
{
this._liftState.Close();
}
public void Stop()
{
this._liftState.Stop();
}
public void Run()
{
this._liftState.Run();
}
}

  

StatePattern的更多相关文章

  1. StatePattern(状态模式)

    /** * 状态模式 * @author TMAC-J * 状态模式和策略模式很像,其实仔细研究发现完全不一样 * 策略模式各策略之间没有任何关系,独立的 * 状态模式各状态之间接口方法都是一样的 * ...

  2. 设计模式のStatePattern(状态模式)----行为模式

    一.产生背景 在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为.如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代 ...

  3. StatePattern(状态模式)-----Java/.Net

    在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式. 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context ...

  4. C#设计模式系列:状态模式(State)

    1.状态模式简介 1.1>.定义 状态模式的核心思想是允许一个对象在它的内部状态改变时改变它的行为,即不同的状态对应不同的行为. 状态模式的针对性很强,当有状态变化的时候可以选择状态模式. 1. ...

  5. c#设计模式介绍

    序号 模式名称 模式描述 应用场景 例子 1 单例模式 (SigletonPattern) 保证一个类仅有一个实例,并提供一个访问它的全局访问点. • 单例类只能有一个实例. • 单例类必须自己创建自 ...

  6. 设计模式之美:State(状态)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):由 ConcreteState 指定它的后继 State. 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改 ...

  7. JAVA 设计模式 状态模式

    用途 状态模式 (State) 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式是一种行为型模式. 结构

  8. 深入浅出设计模式——状态模式(State Pattern)

    模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的.当一个这样的 ...

  9. CSharp设计模式读书笔记(21):状态模式(学习难度:★★★☆☆,使用频率:★★★☆☆)

    模式角色与结构: 示例代码:(本示例在具体状态类中实现状态切换,也可以在环境类中实现状态切换.状态模式一定程度上违背开闭原则) using System; using System.Collectio ...

随机推荐

  1. UnixBench-linux下的跑分软件

    UnixBench是一款开源的测试 unix 系统基本性能的工具,是比较通用的测试VPS性能的工具.UnixBench会执行一系列的测试,包括2D和3D图形系统的性能,测试的结果不仅仅是CPU,内存, ...

  2. OSI7层模型详解

    首先我们借用百度百科上的图片来基本了解一下OSI7层模型的名称以及结构.下面我将从最底层一层一层往上介绍. 物理层:基于Bit传输,是属于物理信道,最基本的机械.电子.定时接口通信信道. 数据链路层: ...

  3. 前端工具HBuilder安装Sass插件

    HBuilder自带未安装的less插件,但是sass插件却没有,需要自己安装,步骤如下: 1.安装sass,参考: http://www.w3cplus.com/sassguide/install. ...

  4. Sql Server函数全解<一>字符串函数

    阅读目录 1.ASCII()函数 2.CHAR()函数 3.LEFT()函数 4.RIGHT()函数 5.LTRIM()函数 6.RTRIM()函数 7.STR()函数 8.字符串逆序的函数REVER ...

  5. bzoj4692: Beautiful Spacing

    先二分答案后dp 设\(su[n]\)为\(\sum_{1}^{n}xi[i]\) 设\(f[n]\)为1时表示第n个单次能做某一行的结尾,且之前的空格满足二分出来的答案. 考虑怎样的\(f[i]\) ...

  6. string类型转换int类型

    C++转换形式(C++11): int main(int argc, char* argv[]) { std::"; std::string str2 = "3.14159&quo ...

  7. RSA非对称性前端加密后端解密

    前端加密代码 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  8. 修复win10升级时断电inaccessible boot device

    代码提示0xc0000001 这里的解决方法对系统以及个人的没有文件丢失的影响,没有重装以及重置上丢失东西的顾虑 解决方法: WINDOWS/system32/config/RegBack/SYSTE ...

  9. H5+ 移动app学习之二 Native.js

    Native.js技术,简称NJS,是一种将手机操作系统的原生对象转义,映射为JS对象,在JS里编写原生代码的技术.如果说Node.js把js扩展到服务器世界,那么Native.js则把js扩展到手机 ...

  10. thinkPHP实现静态页的方法-buildHtml

    thinkphp全站静态页实现方法! 1:在根目录下的全局index.php中加下面这行: define('HTML_PATH', './htm');//生成静态页面的文件位置 2:在项目的配置文件c ...