2012-02-08 47 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對象的代碼。