16

State patternを使用して、状態に応じて動作を変更するオブジェクトをモデル化できること、およびContextが持つことができるさまざまな状態が、インターフェイスを表す具体的なクラスにカプセル化されていることを理解していStateます。私がはっきりしていないのは、このパターンで状態遷移がどのように発生するかです。個人statesは、誰がフォローするかを知って決定しますか、それともContext次にどの状態になるかを決定するのは個人ですか?

4

2 に答える 2

14

GOF Design Patterns book から (これは実装セクションにあります):

1. 誰が状態遷移を定義しますか? 状態パターンは、どの参加者が状態遷移の基準を定義するかを指定しません。基準が固定されている場合、それらは完全にコンテキストで実装できます。ただし、State サブクラス自体に後続の状態と遷移を行うタイミングを指定させる方が、一般的にはより柔軟で適切です。これには、State オブジェクトが Context の現在の状態を明示的に設定できるようにする Interface を Context に追加する必要があります。

このように遷移ロジックを分散化すると、新しい State サブクラスを定義してロジックを変更または拡張することが容易になります。分散化の欠点は、1 つの State サブクラスが少なくとも 1 つの他のサブクラスの知識を持っていることです。これにより、サブクラス間に実装の依存関係が導入されます。

于 2013-01-21T07:36:38.263 に答える