状态模式
2015-12-01 08:45
316 查看
《重构》一书中第一章的例子中,讲到了用状态模式代替分支语句的判断。觉得有必要复习一下状态模式,状态模式解决的是当控制一个对象状态转换的条件表达式过于复杂的情况。把状态的逻辑判断转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简单化。当一个对象的行为取决于它的状态,并且必须在运行时根据状态改变它的行为时,就可以考虑使用状态模式。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
namespace ConsoleApplication11
{
class Context
{
private state state;
public state State
{
get { return state; }
set
{
state = value;
Console.Write("current state instance is "+state.GetType().Name);
}
}
public Context(state state)
{
this.state = state;
}
public void Request()
{
state.Handle(this);
}
}
/// <summary>
/// 抽象状态类
/// </summary>
abstract class state
{
public abstract void Handle(Context c);
}
class StateA : state
{
public override void Handle(Context c)
{
Console.WriteLine(c.State);
}
}
class StateB : state
{
public override void Handle(Context c)
{
Console.WriteLine(c.State);
}
}
class Program
{
static void Main(string[] args)
{
Context c = new Context(new StateA());
c.Request();
Context c1 = new Context(new StateB());
c1.Request();
Console.Read();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
namespace ConsoleApplication11
{
class Context
{
private state state;
public state State
{
get { return state; }
set
{
state = value;
Console.Write("current state instance is "+state.GetType().Name);
}
}
public Context(state state)
{
this.state = state;
}
public void Request()
{
state.Handle(this);
}
}
/// <summary>
/// 抽象状态类
/// </summary>
abstract class state
{
public abstract void Handle(Context c);
}
class StateA : state
{
public override void Handle(Context c)
{
Console.WriteLine(c.State);
}
}
class StateB : state
{
public override void Handle(Context c)
{
Console.WriteLine(c.State);
}
}
class Program
{
static void Main(string[] args)
{
Context c = new Context(new StateA());
c.Request();
Context c1 = new Context(new StateB());
c1.Request();
Console.Read();
}
}
}
相关文章推荐
- 设计模式之行为型模式 - 调用行为的传递问题
- js实现显示当前状态的导航效果代码
- JavaScript获取和设置CheckBox状态的简单方法
- Android中监听软键盘显示状态实现代码
- 七、HTTP应答状态
- ajax readyState的五种状态详解
- C#判断本地文件是否处于打开状态的方法
- javascript ajax的5种状态介绍
- 超越Jquery_01_isPlainObject分析与重构
- php使用cookie实现记住登录状态
- Repeater控件动态变更列(Header,Item和Foot)信息(重构cs)
- Python实现简单状态框架的方法
- Python获取电脑硬件信息及状态的实现方法
- 重构代码的7个阶段
- 代码整洁之道------它山之玉可以重构:身份证号码解析、验证工具(第一天)
- 它山之玉可以重构:身份证号码解析、验证工具(第二天)
- 它山之玉可以重构:身份证号码解析、验证工具(第三天)
- 重构之重与敏捷之轻---身份证号重构回顾
- 《重构》
- Scala: 一次命令式到函数式的重构