Python.use(better, Tkinter=”GoF”) # Command #2
‖記事一覧‖ Python.use(better, Tkinter=”GoF")《Python3.1》
《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23
事例:コードの解説
■ Composite::Client
## ---------------------------------------- Composite::Client
class TIPS(object): # Client, Aggregate
クラス TIPS では、Composite を利用するアプリケーションを規定します。
def __init__(self, master, path): self.tree = Composite(path, self.tail(path)) self.dirImage = PhotoImage(file="_image/folder.gif") self.fileImage = PhotoImage(file="_image/file.gif") self.master = master self.path = path
メソッド __init__ では、さまざまなインスタンス属性を初期設定します。
## ----------------------------------------
def createNode(self, master, tab, image, node):
bg = "aliceblue"
font = "courier 12"
side = LEFT
frame = Frame(master)
frame.config(bg=bg)
frame.pack(anchor=W)
Label(frame, text=tab , font=font).pack(side=side)
ButtonInvoker(frame, image, node ).pack(side=side)
Label(frame, text=node.item, font=font).pack(side=side)
Tkinter のコンポーネント(Label/Button)を利用して、ツリーの各ノードを構築します。
- ButtonInvoker は、既存のコンポーネント Button を拡張したものです。
■ Command::Invoker
## ---------------------------------------- Command::Invoker
class Invoker(object): pass
抽象クラス Invoker では、共通するプロトコルを規定します。
class ButtonInvoker(Invoker, Button):
クラス ButtonInvoker では、既存のコンポーネント Button を拡張するとともに、Invoker で規定されたプロトコルを実現します。
def __init__(self, master, image, receiver): super().__init__( master=master, image=image, command=PanelCommand(receiver), )
クラス ButtonInvoker では、既存のコンポーネント Button を拡張するとともに、。
■ Command::Command
## ---------------------------------------- Command::Command
class Command(object):
抽象クラス Command では、共通するプロトコルを規定します。
def __init__(self, receiver): self.receiver = receiver
メソッド __init__ では、さまざまなインスタンス属性を初期設定します。
- インスタンス属性 self.receiver を介して、イベントに呼応する対象が実行時に確定します。
def __call__(self): pass
これらの抽象メソッドは、共通するプロトコルを規定するもので、子孫クラスで具体的な処理を記述します。
関連記事
- INDEX《Tkinter》
- Python で学ぶ デザインパターンの世界《Tkinter》
- Let’s GoForward - GoF を反面教師に
- C# Design Patterns 22. The Command Pattern.
- Python.use(better, Tkinter=”GoF”)
Command
Last updated♪2009/11/02