Open LeoAndo opened 2 years ago
再起的な構造を持ったパターン。 これにIteratorパターンを適用するのは難しい。
例えばコンピュータのファイルシステムのように、ディレクトリとファイルをまとめてディレクトリエントリとして扱うように、容器と中身を同じ種類のものとして扱いたい場合に用いるデザインパターン。
ディレクトリとファイルをまとめて「ディレクトリエントリ」と呼ぶことがある。
「中身」を表す役です。この役の中には他のものを入れることはできません。サンプルプログラムのFileクラスに該当。
「容器」を表す役です。Leaf役やComposite役を入れることができます。サンプルプログラムのDirectoryクラスに該当。
LeafややComposite役を同一視するための役です。Composite役は、LeafとComposite役に共通のスーパークラスとして実現します。サンプルプログラムのEntryクラスに該当。
Compositeパターンの利用者です。サンプルプログラムのMainクラスに該当。
再起的な構造を持ったパターン。 これにIteratorパターンを適用するのは難しい。
Compositeパターン
例えばコンピュータのファイルシステムのように、ディレクトリとファイルをまとめてディレクトリエントリとして扱うように、容器と中身を同じ種類のものとして扱いたい場合に用いるデザインパターン。
ディレクトリとファイルをまとめて「ディレクトリエントリ」と呼ぶことがある。
Compositeパターンの登場人物
Leaf(葉)の役
「中身」を表す役です。この役の中には他のものを入れることはできません。サンプルプログラムのFileクラスに該当。
Composite (複合体)の役
「容器」を表す役です。Leaf役やComposite役を入れることができます。サンプルプログラムのDirectoryクラスに該当。
Componentの役
LeafややComposite役を同一視するための役です。Composite役は、LeafとComposite役に共通のスーパークラスとして実現します。サンプルプログラムのEntryクラスに該当。
Client(依頼者)の役
Compositeパターンの利用者です。サンプルプログラムのMainクラスに該当。