例題で学ぶデザインパターン #10: テキストによるツリー表示:仕様変更
例題で学ぶ Jython/Swing デザインパターン《Jython2.5》
テキストによるツリー表示 :仕様変更
《著》越智ことり+小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
第1版♪2003/05/23 ● 第2版♪2009/04/03
■ 概要
例題により、アプリケーションを作成する過程を通して、Jython/Swing によるデザインパターンを習得します。
この課題では、Swing/GUI を使って階層構造を持つ情報を提示します。〈GoF〉Composite/Iterator/Visitor/Command パターンを導入すると、if/for 文によるコードの汚染、配列の境界問題が解消されるので、要求仕様の変更にも柔軟に対処でき、簡潔で見通しの良いコードを記述できるようになります。
《Note》JPython1.1.x/Jython2.1.x 用に作成したセミナー課題を、Jython2.5 で再構成しました。
事例:コードの解説
■ モジュール:TreeComposite.py
#! /usr/bin/jython2.5b3 class Node(object): ... def __str__(self): if self.node.leaf: return "/".join([str(e) for e in list(self.node.path)]) else: return "\n".join([ "%s%s%s (%s)"%( "| "*(level-1), "+-- "*(not not level), node, len(Node(node)), ) for node, level in zip(self.children(), self.levels()) ])
メソッドの本体に yield 文を記述すると、そのメソッドは「ジェネレータ」になります。たとえば、for 文とともにジェネレータとして Node を利用すると、ツリーを構成する各ノード e が順に得られます。
■ 何が問題か
switch の呪縛から逃れるには、。
Tips
》作業中です《
Last updated♪09/06/11