现在的位置: 首页 > 综合 > 正文

设计模式——状态模式的多态

2013年02月27日 ⁄ 综合 ⁄ 共 1035字 ⁄ 字号 评论关闭

实现同一方法在不同状态下执行不同的操作

状态的切换的工作交给具体状态负责,

因为Context依赖抽象或接口,并非依赖具体状态,所以状态切换与context之间实现了解藕。

 先看代码:

abstract class State
{
    public abstract void Handle(Context context);
}

 

class ConcreteStateA:State
{
    public override void Handle(Context context)
    {
        context.State = new ConcreteStateB();
    }
}

 

class ConcreteStateB:State
{
    public override void Handle(Context context)
    {
        context.State = new ConcreteStateA();
    }
}

 

 

class Context
{
    private State state;
    public Context(State state)
    {
        this.state = state;
    }

    public State State
    {
        get { return state; }
        set { state = value;
        Console.WriteLine("当前状态:" + state.GetType().Name);
        }
    }

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

 

入口函数:

class Program
{
    static void Main(string[] args)
    {
        Context c = new Context(new ConcreteStateA());
        c.Request();
    }
}

 

以上代码意思就是,在A、B两种状态之间切换。

我们可以给State类增加一个抽象方法

public abstract void Dothing();

然后再ConcreteStateA、ConcreteStateB两类当中重写这个抽象方法。

public override void Dothing();

抱歉!评论已关闭.