第3章 Command パターン 1/4, IronPython

前の記事記事一覧次の記事

IronPython で学ぶ WPF プログラミングの世界《IronPython2.6》

Command パターン

《著》森こねこ・後藤いるか・小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪1995/07/02 ● 第2版♪2003/01/29 ● 第3版♪2008/04/28

■ 概要

WPF の特徴を活かして、デザインパターン Command を導入します。

イベントに呼応するアクションを規定したいときには〈GoF〉Command パターンを導入します。すると、密接に関係する「イベント/アクション」対を、再利用可能な「部品」として扱えます。

《Note》IronPython1.x 用に作成したセミナー課題を、IronPython2.6 で再構成しました。

■ 関連記事


事例: Command パターン

あるイベントが発生して、それに対応するアクションを起動したいとき、すぐに思い浮かぶのは古典的な〈GoF〉Command パターンです。すると、密接に関係する「イベント/アクション」対を、再利用可能な「部品」として扱えます。
まず、パターンの復習から始めます。古典的な Command パターンを踏襲したのが、CommandToolBar.py です。

>ipy.exe CommandToolBar.py


アプリケーションを起動すると、ウィンドウが現れます。
1)ボタン〔Open...〕を選択すると、次のようなダイアログが現れます。



任意のファイルを選択すると、選択した画像がパネルに追加されます。
2)ボタン〔Red〕〔Green〕〔Blue〕を選択すると、パネルの背景色が変化します。
3)ボタン〔Close〕を選択すると、ウィンドウを閉じて、アプリケーションが終了します。

1)対象となるコマンド:Client

Command::Client では、Command::Command で規定されたプロトコルに従う、各コントロールを配置します。

class ExWindow(Window):         # Command::Client
    def init(self):
        target = "toolBarTray", "panel",
        self._Controls(target)
        target = "fileToolBar", "colorToolBar",
        for e in self.toolBarTray.ToolBars:
            if e.Name in target:
                setattr(self, e.Name, e)
        for e in FileOpen(self.panel), FileClose(self):
            self.fileToolBar.Items.Add(e)
        for e in "Red", "Green", "Blue":
            e = PaintColor(Content=e, panel=self.panel)
            self.colorToolBar.Items.Add(e)

ツールバーの各項目に、コントロール FileOpen/FileClose/PaintColor を配置するとともに、各コントロールには固有のコマンドを割り当てます。

《Tips》この事例では、ひとつのモジュールを扱っていますが、実際の開発では、個別にモジュールを用意します。要求仕様の変更に際して、新たなモジュール(Open)を追加するだけで、既存のモジュール(Closed)はその影響を受けません。すると、開放閉鎖原則〔OCL: Open-Closed Principle〕に沿った、問題解決が可能になります。再利用可能な「部品」として扱える効能が、ここにも活かされています。

Last updated♪09/06/20