【コンポジットパターン】
Compositeパターン とは?
最終更新:
💡 ひとつの要素も、要素のまとまりも同じ操作で
GoFの構造に関するデザインパターンの一つ。単一の要素と、子要素を持つまとまりを共通のインターフェースで扱い、部分と全体のツリーを表す。まとまりは必要に応じて子へ同じ操作を委ねる。
📌 このページのポイント
- Componentが、要素に共通する操作を定める
- Leafは末端、Compositeは子要素を持つまとまり
- Compositeの子には、Leafも別のCompositeも入れられる
- 子の追加・削除をどの型に置くかは、設計上の選択
Compositeパターンは、何を解決するの?
要素がひとつでも、複数をまとめたものでも、同じ操作で扱いたいときの設計だよ。例えば図形と図形のグループを、どちらも描画できるものとして扱う。呼び出す側で、種類ごとに処理を分ける負担を減らせるんだ
ファイルとフォルダで、説明してもらえる?
Component、Leaf、Compositeは、どうつながる?
Componentは共通の操作、Leafは末端の要素、Compositeは子を持つ要素だよ。子もComponentとして扱うので、Compositeの中に別のCompositeを入れられる。共通の操作があることと、すべて同じ処理をすることは別なんだ
画面の部品にも使えるの?
子を追加する操作も、Leafに必要?
共通の型に置く設計も、子を持つ型だけに置く設計もあるよ。前者は統一して呼びやすいけれど、Leafでは意味のない操作になる。後者は扱える型を限定できる。共通にしたい操作と、子の管理に必要な操作を分けて検討するんだ
まとめ:ざっくりこれだけ覚えればOK!
「Compositeパターン」って出てきたら「ひとつの要素と要素のまとまりを、同じ操作で扱うツリーの設計」と思えばだいたいOK!
📖 おまけ:英語の意味
「Composite Pattern」 = 合成・複合のパターン
💬 compositeは複数のものを組み合わせた、という意味だよ。GoFのDesign Patterns(1994年刊行)で整理された構造パターンの一つで、部分と全体を組み合わせる設計を指すんだ