Python.use(better, Tkinter=”GoF”) # Composite #1
‖記事一覧‖ Python.use(better, Tkinter=”GoF")《Python3.1》
# Python で学ぶ デザインパターンの世界
《著》森こねこ・小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
α版♪1993/11/25 ● β版♪1995/11/22 ● 第1版♪2003/05/23 ● 第2版♪2006/10/28
事例:コードの解説
■ Composite::Component
## ---------------------------------------- Composite::Component
class Component(object):
抽象クラス Component では、共通するプロトコルを規定します。
def __init__(self, item): self.item = item
メソッド __init__ では、ツリーを構成する各ノードが保持する項目 self.item を初期設定します。
## ----------------------------------------
def add_(self, component): pass
def remove_(self): pass
これらの抽象メソッドは、共通するプロトコルを規定するもので、子孫クラスで具体的な処理を記述します。
■ Composite::Leaf:単一オブジェクト
## ---------------------------------------- Composite::Leaf class Leaf(Component):
具象クラス Leaf では、単一のノードを構成して、末端に位置する各ノード(葉)を実現します。
def __repr__(self):
return "#%r"%self.item
メソッド __repr__ は、組み込み関数 repr に呼応して、オブジェクトに固有の文字列表現を規定します。
■ Composite::Composite:複合オブジェクト
## ---------------------------------------- Composite::Composite
class Composite(Component):
具象クラス Composite では、複数のノードによって構成され、中間に位置する各ノード(枝)を実現します。
def __init__(self, item): super().__init__(item) self.children = []
メソッド __init__ では、その傘下にある複数のノードを管理する self.children を初期設定します。
def __repr__(self):
return "%s(#%s: [%s])"%(
self.__class__.__name__,
self.item,
",".join(["%s"%e for e in self.children]),
)
メソッド __repr__ は、組み込み関数 repr に呼応して、オブジェクトに固有の文字列表現を規定します。
- インスタンスが属するクラスの名前に続いて、
- その傘下にある各ノード self.children が保持する項目 e をカンマ「,」で区切りながら列挙します。
## ----------------------------------------
def add_(self, component):
self.children.append(component)
メソッド add_ は、指定されたノード component を、その傘下に追加します。
↑TOP
関連記事
- INDEX《Tkinter》
- Python で学ぶ デザインパターンの世界《Tkinter》
- Let’s GoForward - GoF を反面教師に
- C# Design Patterns 16. The Composite Pattern.
- Python.use(better, Tkinter=”GoF”)
Composite
Last updated♪2009/10/30