プログラムの編集モードについてのアイデアを受け取りたいと思います。つまり、イメージエディタのモードのように、選択されたモードで定義された異なる動作を持つアプリケーションを作成するパターンです。 例を挙げてみましょう:ブロックを配置して矢印でリンクするアプリケーションがあります。だからモード移動ブロック、モード削除ブロック、矢印を使うことができます。ブロック間のリンクの作成やブロックの編集を選択できます。だから私の考えは、私がツールバーのボタンを選択するために必要なそれぞれのタイプの動作です。いずれかのボタンをクリックすると、マウス入力の動作が必要なものに応じて処理されます。エディションモードのデザインパターン
答えて
投稿した例について説明します(ありがとう)。私が何かを逃している場合は教えてください。
すべてのツールが遵守しなければならない共通プロトコルを提供するabstract class Tool
をモデル化します。これは、ツールを使用する行為をモデリングするためのメッセージで、それを解放する行為をモデリングするためのメッセージです(鉛筆を使用したとき、表面上に置いて使用して再び持ち上げるときのように)。 RestOn
とRaiseUp
のようなものです。
あなたはツール(どちらかBlock
秒またはLink
s)は下Element
秒で動作し、あなたはウィッヒ要素は、ツールのポインタの下にある知っているクラスにさせるの責任を割り当てる必要があります。それはCanvas
クラスかもしれません。
次に、Tool
(Hand Tool
,など)から継承ツリーを作成する特定のツール動作を実装できます。 各ツール(シングルトンパターン)の一意のインスタンスを提供Tool
クラスの静的メソッド/プロパティを定義します:
abstract class Tool {
abstract void RestOn...
abstract void RaiseUp...
static Tool HandTool() { return _handTool; }
static Tool EraseTool() { return _eraseTool; }
....
}
その後に私は次のことを行うと、ツールバーのボタンとの統合のために
ツールバーのボタンのハンドラは、各ツールは抽象クラスTool
に関してpolimorphycallyであるという事実は、あなたが忘れようになる
btnHandTool_click(...) {
_canvas.SetActiveTool(Tool.HandTool());
}
btnEraseTool_click(...) {
_canvas.SetActiveTool(Tool.EraseTool());
}
...
のようなものがあるでしょうアクティブなツールがHandToolかEraseToolのインスタンスかどうかを特定するコードを書いてください。 canvaのアクティブなツールの戦略(パターン)を変更することができます。内部的には、クラスは、実行中のツールが使用されていることを伝えることができません。それは、それが応答できるメッセージについてのみ知っています。
最後が、非常に重要なのは、あなたがそれを描画アプリケーションを構築するために専用の章では、さまざまなを示す、ツールのセット設計オブジェクト指向ソフトウェアという名前レベッカ・ウィフズ・ブロックによってexelent本の中で見つけることができますモデリングに使用できるテクニック 私はそれをつかみ、見てみることをお勧めします。本当に価値があります。
状態パターンは、この種の作業には理想的です。
- 1. プロジェクトオイラーのデザインパターン
- 2. アクションスクリプト3のデザインパターン
- 3. アンドロイドのデザインパターン
- 4. QAのデザインパターン
- 5. ハードウェアデバイスコントローラのデザインパターン
- 6. デザインパターンのアドバイス
- 7. ステータスモデルのデザインパターン
- 8. コンストラクタのデザインパターン
- 9. UITableViewControllerのデザインパターン
- 10. マウスインタラクションのデザインパターン
- 11. javascriptのデザインパターン
- 12. データアクセス層のデザインパターン
- 13. デザインパターンの選択
- 14. テンソルフローモデルのデザインパターン
- 15. Javaメソッドのデザインパターン
- 16. プレーヤーのデザインパターン
- 17. データアクセス層のデザインパターン
- 18. リポジトリのデザインパターン
- 19. iOSパズルゲームのデザインパターン
- 20. デザインパターンの選択
- 21. フレームワークのデザインパターン
- 22. Delphi 2009のデザインパターン
- 23. sql builderのデザインパターン
- 24. モデムアプリケーションのデザインパターン
- 25. Jhipsterのデザインパターン
- 26. セッションオブジェクトのデザインパターン
- 27. クライアント/サーバのデザインパターン
- 28. イベントドリブンロジックのデザインパターン
- 29. PowerShell Cmdletのデザインパターン
- 30. APIのPHPデザインパターン
工場パターンを使用するケースはありますか? –
つまり、 'vim'でモード動作をエミュレートしようとしていますか? – GWW
私は、GOFの本はあなたに大きな助けになると思います:http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612 州/戦略パターンに潜入して教えてくださいそれはどうやって行くの? いくつかの興味深いリソース: http://www.dofactory.com/Patterns/PatternStrategy.aspx http://www.dofactory.com/Patterns/PatternState.aspx – nick2083