2012-02-08 39 views
0

我明白改变状态的想法,我不明白是什么意思在维基百科上,当它说,这种模式允许对象简单介绍了国家软件设计模式。

在运行时 部分改变它的类型究竟是怎么做的这? wiki对概念有点含糊。

+1

我建议跳过维基百科,直接找到“设计模式”的副本。如果你不拥有它,那么尽快纠正 – tcarvin 2012-02-08 17:08:54

回答

1

State Pattern的基本思想是在某些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,其中包含对最流行设计模式的描述。

0

我认为这句话的意思是你可以有一个类Cursor对象(借用维基百科的例子),并将其用作工具。

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