简单解释国家软件设计模式。

时间:2012-02-08 15:39:01

标签: design-patterns

我理解改变状态的想法,我不明白的是它在维基百科上说这个模式允许对象

时的含义
  

在运行时部分更改其类型   究竟是怎么做到的?维基对这些概念有点模糊。

2 个答案:

答案 0 :(得分:1)

状态模式的基本思想是在某些Context类中,某些行为在另一个对象中定义。

public class Context
{
    ....

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

Request的行为取决于_state的当前值。 State可以在运行时更改,对于Context的用户,Context的行为会发生变化。

在以下代码中,当前Context传递给StateState可以更改Context

    /// <summary>
    /// The 'State' abstract class
    /// </summary>
    abstract class State
    {
        public abstract void Handle(Context context);
    }

    /// <summary>
    /// A 'ConcreteState' class
    /// </summary>
    class ConcreteStateA : State
    {
        public override void Handle(Context context)
        {
            context.State = new ConcreteStateB();
        }
    }

    /// <summary>
    /// A 'ConcreteState' class
    /// </summary>
    class ConcreteStateB : State
    {
        public override void Handle(Context context)
        {
            context.State = new ConcreteStateA();
        }
    }

此示例取自dofactory,其中包含对大多数流行设计模式的描述。

答案 1 :(得分:0)

我认为该语句的含义是你可以拥有一个Cursor类的对象(借用维基百科的例子),并将其用作工具。

但是,Cursor对象的内部状态可以是PenTool或SelectionTool,它可以在不影响Cursor对象的情况下来回切换。因此,从本质上讲,Cursor对象在用作工具时,会从PenTool“更改其类型”到SelectionTool并返回,而不会影响使用Cursor对象的代码。