您的位置:首页 > 其它

设计模式之行为模式---状态模式

2016-10-25 11:34 393 查看

一、状态设计模式的特点

当一个对象内部具允许有多个状态改变时,我们将不同的状态提取出来作为一个单独的类来描述一个状态,这样可以很容易的扩展对象,使其具有更多的状态表达,而不会影响到对象本身。

一个状态模式的结构图:



State作为一个抽象接口类,向外界提供一个对象,而派生类继承自State实现接口作为不同的状态表示。

Context是一个状态调配类,它根据客户端传递过来的指令判断对象需要执行那种状态,而指定创建那个子类的实例接口。从而实现状态的改变。

二、状态模式的实现

1、在实际生活中我们可以我们的工作看成一个状态模式,在不同的时间段的工作的状态不同。



2、状态模式的代码实现

using System;
/*
zhong de zhuang tai jie kou
*/
abstract class  State
{
public abstract void Handle (Context context);
}

class ConcreteStateA :State
{
public override void Handle (Context context)
{
if (context.Hourr < 12) {

Console.WriteLine ("Is work");
} else {
context.Request (new ConcreteStateB ());
context.WriteProgran ();
}

}

}

class ConcreteStateB :State
{
public override void Handle(Context context)
{
if (context.Hourr < 13) {
Console.WriteLine ("Lunch take a nap.");
} else {
context.Request (new ConcreteStateC ());
context.WriteProgran ();
}
}
}

class ConcreteStateC :State
{
public override void Handle(Context context)
{
Console.WriteLine ("Home from work");
}
}

//zhuang tai tiao pei
class Context
{
private State state;
//chu shi gong zuo zhuang tai
public Context()
{
state = new ConcreteStateA ();
}

/*ji lu shi jian de zhuan huan*/
private double hourr;
public double Hourr
{
get{ return hourr;}
set{ hourr = value;}
}

//geng gai dang qian zhuang tai
public void Request(State se)
{
state = se;
}

public void WriteProgran()
{
state.Handle (this);
}
}

class WinMain
{
public  static void Main(string[] args)
{
Context c = new Context ();
c.Hourr = 9;
c.WriteProgran ();

c.Hourr = 12;
c.WriteProgran ();

c.Hourr = 17;
c.WriteProgran ();

Console.ReadKey ();
}
}


运行结果:



8413
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: