Python 弾丸ツアー #DP: ツリー ... step 3: Command::Invoker
Python.use(better); Python 弾丸ツアー #DP: Tkinter/Python 編
>>> ツリー(階層構造)
step 3: Command::Invoker
《Python3.1|Jython2.5|IronPython2.6》
step 3: コードの解説
■ Command::Invoker
## ---------------------------------------- Command::Invoker class Invoker(object): pass class ButtonInvoker(Invoker, Button): def __init__(self, master, image, receiver): super().__init__( master=master, image=image, command=PanelCommand(receiver), )
 ̄抽象クラス Invoker では、共通するプロトコルを規定します。具象クラス ButtonInvoker では、既存のコンポーネント Button を拡張するとともに、Invoker で規定されたプロトコルを実現します。ButtonInvoker は、Button を介して、いつでも PanelCommand を参照できます。
■ Command::Command
## ---------------------------------------- Command::Command class Command(object): def __init__(self, receiver): self.receiver = receiver def __call__(self): pass
 ̄抽象クラス Command では、メソッド呼び出しに呼応して、適切な処理を依頼する手段を規定します。
def __init__(self, receiver): self.receiver = receiver
 ̄メソッド __init__ では、イベントに呼応する対象 self.receiver を初期設定します。ここでは、その対象が実行時に確定します。
def __call__(self): pass
■ Command::ConcreteCommand
## ---------------------------------------- Command::ConcreteCommand class PanelCommand(Command): def __call__(self): self.receiver.createPanel()
 ̄具象クラス PanelCommand では、抽象クラス Command で規定したプロトコルを実現します。
def __call__(self): self.receiver.createPanel()
 ̄イベントに呼応する対象 self.receiver に対して、パネルを作成 createPanel するように依頼します。
□
《Point》ButtonInvoker は、Button の子孫としての特徴を活かして、呼び出し可能オブジェクトの役割を担います。
 ̄ButtonInvoker は、Button を介して、いつでも PanelCommand を参照できます。キーワード引数 command= に指定した、呼び出し可能オブジェクト PanelCommand は、イベントに呼応して起動されます。このとき、クラス呼び出し PanelCommand() の実引数には receiver を指定してあるので、これに実際の処理を依頼します。つまり、アイコンをクリックすると、新たなウィンドウが現れます。□
↑TOP
》作業中です《