Python.use(better, Tkinter=”GoF”) # Command #1
‖記事一覧‖ Python.use(better, Tkinter=”GoF")《Python3.1》
《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23
事例:コードの解説
■ Composite::Component
## ---------------------------------------- Composite::Component
class Component(object):
抽象クラス Component では、共通するプロトコルを規定します。
def __init__(self, path, item): self.path = path self.item = item
メソッド __init__ では、ツリーの頂点に位置する self.path を初期設定します。
■ Command::Receiver
## ---------------------------------------- Command::Receiver
def createPanel(self):
top = Toplevel()
top.title(self.item)
top.config(padx=16, pady=4)
current = join(self.path, self.item)
frame = Frame(master=top)
frame.pack()
item = "getsize"
w = Label(master=frame, text=item)
w.pack(side=LEFT)
w = Entry(master=frame, width=10)
w.pack(side=LEFT)
w.insert(END, getsize(current))
frame = Frame(master=top)
frame.pack()
items = "getatime", "getmtime", "getctime",
for i, e in enumerate(items):
w = Label(master=frame, text=e)
w.grid(row=i, column=0, sticky=E)
w = Entry(master=frame, width=22)
w.grid(row=i, column=1, sticky=W)
w.insert(END, eval("ctime(%s('%s'))"%(e, current)))
メソッド createPanel では、ツリーの各ノードの情報を提示するための、新たなパネルを生成します。
■ Composite::Leaf:単一オブジェクト
## ---------------------------------------- Composite::Leaf class Leaf(Component):
具象クラス Leaf では、単一のノードを構成して、末端に位置する各ノード(葉)を実現します。
■ Iterator::ConcreteIterator
## ---------------------------------------- Iterator::ConcreteIterator def items(self): return [self.item]
メソッド items では、各ノードが保持する項目 self.item を列挙したリストをリターン値にします。
def nodes(self):
return [self]
メソッド nodes では、各ノード self を列挙したリストをリターン値にします。
■ Composite::Composite:複合オブジェクト
## ---------------------------------------- Composite::Composite
class Composite(Component):
具象クラス Composite では、複数のノードによって構成され、中間に位置する各ノード(枝)を実現します。
def __init__(self, path, item): super().__init__(path, item) self.children = []
メソッド __init__ では、ツリーを構成する各ノードが保持する項目 self.item を初期設定します。
■ Iterator::ConcreteIterator
## ---------------------------------------- Iterator::ConcreteIterator def items(self): return reduce(lambda s,e: s+e.items(), self, [self.item])
メソッド items では、各ノードが保持する項目 self.item を列挙したリストをリターン値にします。
def nodes(self): return reduce(lambda s,e: s+e.nodes(), self, [self])
メソッド nodes では、各ノード self を列挙したリストをリターン値にします。
↑TOP
関連記事
- 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/01