第3章 Command パターン 1/4, IronPython
IronPython で学ぶ WPF プログラミングの世界《IronPython2.6》
■ 概要
WPF の特徴を活かして、デザインパターン
イベントに呼応するアクションを規定したいときには〈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〕に沿った、問題解決が可能になります。再利用可能な「部品」として扱える効能が、ここにも活かされています。
《付録》CommandToolBar.xaml
<!-- # Copyright (C) 2000-2008, (^.^) piyo-piyo Tamago-Club # # History: WPF examples # 2008/01/25, IronPython 1.1.1 (download) # 2008/08/22, IronPython 1.1.2 (download) # 2008/03/16, ver.2.0, WPF # 2008/00/00, ver.2.1, IronPython 1.1.2
-
- >