RubyTkにTkCompositeというなぞのライブラリがあるので、しらべた。
名前から推測するに、Composite Patternと関係がありそうだ。
Composite Patternとは
Composite Patternとは、Gofのパターンの一つ。
説明はwikipediaに譲るとして、自分の理解では、
再帰的な操作が可能なデータ構造
親子関係のあるデータ構造と素の操作
という感じ。たとえば単方向リスト、木構造などのデータ構造とそれに対する操作。 何だか当たり前のことだ。
登場人物
- Component(親) 全ての親になるもの
- Leaf(葉) Leafを持たないもの
- Composite(枝)Leafを持つもの
TkCompositeの使い方
TkCompositeを利用すると、 複数のウィンドウ部品がまとまってできているウィンドウ部品を簡単に作成できるみたい。
以下が、作法。
class Tkhoge < TkWindow
include TkComposite
def initialize_composite
...
end
end
@frameがインスタンス変数として利用できる。 この@frameを親にして、この部品たちを組み合わせる(ここがcomposite!)
delegateを利用すると、属性を子の部品に委譲できる。
詳しくは以下のリンクを参照。
サンプル
再生、停止ボタン、エントリフィールドをもつのモックguiを作成してみた。
GUIの親部品、子部品がcompositeのよきサンプル。