2012-02-08 30 views
0

私は状態を変更する考えを理解し、私が理解していないが、それはこのパターンがStateソフトウェアデザインパターンの簡単な説明。

にオブジェクトが部分的にこれがどのように行われるかを正確に実行 でその種類を変更することができますことを言うとき、それはウィキペディアに何を意味するのかであります? wikiは概念について少し曖昧です。

+1

私はウィキペディアをスキップし、「Design Patterns」のコピーに直接進むことをお勧めします。あなたがそれを所有していない場合は、その時点で是正してください:) – tcarvin

答えて

1

State Patternの基本的な考え方は、Contextクラスによっては、ある動作が別のオブジェクトで定義されていることです。

public class Context 
{ 
    .... 

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

Requestの挙動は_stateの現在の値に依存します。 Stateは実行時に変更可能なもので、Contextのユーザーの場合、Contextの動作が変更されます。

現在のContextStateに、StateContextに変更されます。

/// <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オブジェクトは、ツールとして使用すると、Cursorオブジェクトを使用しているコードに影響を与えずに、PenToolからSelectionToolに、そしてそのタイプを「戻す」ことができます。

関連する問題