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 ...
随机推荐
- linux查看安装文件
rpm -qa jdk 查看名字包含"jdk"的已安装的文件 which java 查看java命令的所在目录 rpm -qf `which java` 查看java命令所对应的安 ...
- Unity 官网教程 -- Multiplayer Networking
教程网址:https://unity3d.com/cn/learn/tutorials/topics/multiplayer-networking/introduction-simple-multip ...
- XUT 1245
这是一道2016湘潭邀请赛的题目,记得那个时候看到这个题目就想到了最短生成树,然后给别人做,WA了,最后发现是有向图,然后我自己去写了个搜索,结果是RE吧 今天刚刚好想到这个题目,然后再来做,发现这个 ...
- Qt json 数据处理
用到的头文件 #include <QJsonArray> #include <QJsonDocument> #include <QJsonObject> json解 ...
- Mosquitto搭建Android推送服务番外篇一:各种报错解决
文章钢要: 目前笔者在开发搭建Mosquitto服务器,在此期间遇到很多实际问题,所以走了很多弯路,在这里写出来为大家提供一些帮助. 1.安装完成后启动Mosquitto报错 执行mosquitto客 ...
- iOS开发常用校验
一.身份证号码校验 + (BOOL)cheakIdentityCard: (NSString *)value { value = [value stringByTrimmingCharactersIn ...
- webServer-----Spring 集成cxf笔录
目前webserver主要有俩中方式:1,传统的webserver标准集成方式-生成WSDL的xml文档. 2, 基于restful风格的webserver java RESTful We ...
- 搭建自己私有的PKM系统,各家PKM大比拼。。附:构建自己熟悉的基础Docker,破解联通光猫
Docker这容器真是很好玩!干啥都想上docker了,快疯了. 这不,最近wiz笔记开始收费,很是不爽,需要寻求新的PKM系统了.备选及落选理由如下: wiz笔记 -- 好用,顺手.要开始收费了,不 ...
- 搭建LAMP环境注意事项
一:安装mysql 5.5以上版本需要使用cmake 和 bison 并且需要安装ncurses 在安装MySQL完毕之后,需要覆盖 掉 /etc/my.cnf centos默认会有一个my.cnf文 ...
- Storm Windowing storm滑动窗口简介
Storm Windowing 简介 Storm可同时处理窗口内的所有tuple.窗口可以从时间或数量上来划分,由如下两个因素决定: 窗口的长度,可以是时间间隔或Tuple数量: 滑动间隔(slidi ...