我理解改变状态的想法,我不明白的是它在维基百科上说这个模式允许对象
时的含义在运行时部分更改其类型 究竟是怎么做到的?维基对这些概念有点模糊。
答案 0 :(得分:1)
状态模式的基本思想是在某些Context类中,某些行为在另一个对象中定义。
public class Context
{
....
public void Request()
{
_state.Handle(this);
}
}
Request
的行为取决于_state
的当前值。 State
可以在运行时更改,对于Context
的用户,Context
的行为会发生变化。
在以下代码中,当前Context
传递给State
,State
可以更改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对象的代码。