2

状態パターンを使用しようとしていますが、質問があります。次のような状態の数が限られている状況専用に設計された状態パターンです。

TCPState: 1- TCPEstablished 2- TCPLisenting 3- TCPClosed など

または、従業員の勤怠システムの従業員など、何百もの状態がある場合に使用できます。従業員は、バランスにある年間休暇の数、これを補償する必要がある時間数など、複数のコンポーネントの複合状態を持ちます。各従業員は、最終的に特定の行動を伴う状態と見なされる複数の属性の組み合わせを持つことができます。

この場合、何百もの状態オブジェクトが存在することになりますが、これは正しいことでしょうか? 状態オブジェクトの命名をどのように管理しますか? たとえば、状態の 3 分の 1 が特定のメソッドの特定の動作を共有し、別の 4 分の 1 が特定のメソッドの別の動作を共有している場合はどうしますか。つまり、すべての状態がすべてのメソッドで固有の動作を必ずしも持っているわけではありません。実装をコピーして、この共通メソッドに対して同じ動作をするすべての状態に貼り付けるのは賢明ではないと思います!

どうもありがとうございました。

4

1 に答える 1

0

「State」クラスの定義された最大数はありませんが、「State」クラスごとに「State」クラスを実装すると、大量のコード重複が発生する可能性が高く、それ自体が問題と見なされます。

割り当てられた値の組み合わせとしての「状態」は、一連の抽象メソッドの実装である状態パターンの「状態」クラスと同じではないことに注意してください。あなたが私に尋ねるなら、「状態」はパターンの「振る舞い」と呼ばれるべきです。

「状態」クラスの限られたセットで動作をキャプチャできる場合 (つまり、限られた数のコード行でビルドできる場合、おそらくそうです)、状態パターンを適用できます。すでに述べたように、複数のアクティブな状態を維持することで、状態パターンを複数回適用できます。

于 2013-02-18T11:02:09.427 に答える