StatePattern
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的更多相关文章
- StatePattern(状态模式)
/** * 状态模式 * @author TMAC-J * 状态模式和策略模式很像,其实仔细研究发现完全不一样 * 策略模式各策略之间没有任何关系,独立的 * 状态模式各状态之间接口方法都是一样的 * ...
- 设计模式のStatePattern(状态模式)----行为模式
一.产生背景 在面向对象软件设计时,常常碰到某一个对象由于状态的不同而有不同的行为.如果用if else或是switch case等方法处理,对象操作及对象的状态就耦合在一起,碰到复杂的情况就会造成代 ...
- StatePattern(状态模式)-----Java/.Net
在状态模式(State Pattern)中,类的行为是基于它的状态改变的.这种类型的设计模式属于行为型模式. 在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context ...
- C#设计模式系列:状态模式(State)
1.状态模式简介 1.1>.定义 状态模式的核心思想是允许一个对象在它的内部状态改变时改变它的行为,即不同的状态对应不同的行为. 状态模式的针对性很强,当有状态变化的时候可以选择状态模式. 1. ...
- c#设计模式介绍
序号 模式名称 模式描述 应用场景 例子 1 单例模式 (SigletonPattern) 保证一个类仅有一个实例,并提供一个访问它的全局访问点. • 单例类只能有一个实例. • 单例类必须自己创建自 ...
- 设计模式之美:State(状态)
索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):由 ConcreteState 指定它的后继 State. 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改 ...
- JAVA 设计模式 状态模式
用途 状态模式 (State) 当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式是一种行为型模式. 结构
- 深入浅出设计模式——状态模式(State Pattern)
模式动机 在很多情况下,一个对象的行为取决于一个或多个动态变化的属性,这样的属性叫做状态,这样的对象叫做有状态的 (stateful)对象,这样的对象状态是从事先定义好的一系列值中取出的.当一个这样的 ...
- CSharp设计模式读书笔记(21):状态模式(学习难度:★★★☆☆,使用频率:★★★☆☆)
模式角色与结构: 示例代码:(本示例在具体状态类中实现状态切换,也可以在环境类中实现状态切换.状态模式一定程度上违背开闭原则) using System; using System.Collectio ...
随机推荐
- signalr 配置错误跟踪
<system.diagnostics> <trace autoflush="true" indentsize="4"> <lis ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- docker版wordpress
拉取wordpress镜像 docker pull wordpress:latest 创建mysql 容器docker run --name wordpress-mysql -e MYSQL_ROOT ...
- JSON中eval与parse的区别
json的的解析方法 (非原创) json的解析方法共有两种:eval_r() 和 JSON.parse(),使用方法如下: var jsonData = '{"data1":&q ...
- printf对齐
C语言中,将printf函数打印出的字符像表格一样分类对齐.%-10d表示这个字符型占10个字节,负号表示左对齐.即下面表格中的x1位置开始填充.如果是%10d,表示右对齐,即在x10位置对齐. x1 ...
- 编译安装 varnish-4.1.2和yum 安装 varnish-4.0.3
vanish可以让用户自己选择缓存数据是存于内存还是硬盘,存于内存一般基于二八法则即常访问的数据是磁盘存储的总数据五分之一,因此内存也应该是硬盘文件大概五分之一.如果有多台vanish则,总内存满足即 ...
- October 28th Week 44th Friday 2016
Life is not a problem to be solved, but a reality to be experienced. 人生不是待解决的难题,而是等着我们去体验的现实. Press ...
- JAVASCRIPT常用API总结
目录 元素查找 class操作 节点操作 属性操作 内容操作 css操作 位置大小 事件 DOM加载完毕 绑定上下文 去除空格 Ajax JSON处理 节点遍历 元素查找 // Node docume ...
- C 标准库系列之概述
基本上很多编程语言都会提供针对语言本身的一系列的标准库或者包,当然C语言同样也有提供标准库,C语言的标准库是一系列的头文件的集合:如assert.h.ctype.h.errno.h.float.h.l ...
- Datazen自定义地图
Datazen的地图数据定义主要以ESRI的Shape文件格式为主,这是现如今被广泛使用的一种地图数据格式.在Datazen中,自定义地图需要提供如下两个地图数据定义文件: SHP文件提供地图的位置数 ...