Composite は、 構造に関するデザインパターンの一つで、 オブジェクトを木のような構造に構成し、 あたかも単一のオブジェクトであるかのように扱えるようにします。
Composite は、 ツリー構造の構築を必要とする問題の大部分の解決策として、 かなりの人気を得るようになりました。 Composite の大きな特徴は、 ツリー構造全体でメソッドを再帰的に実行し、 結果をまとめあげることです。
複雑度:
人気度:
使用例: Composite パターンは、 Java コードではよく見かけます。 ユーザー・インターフェースのコンポーネントの階層構造の表現や、 グラフに対して動作するコードで多く使われます。
Java の標準ライブラリーでの Composite の使用例です:
見つけ方: オブジェクト・ツリーがあって、 ツリーのそれぞれのオブジェクトが同じクラス階層の部分であれば、 十中八九、 コンポジットです。 もしこれらのクラス中のメソッドが、 ツリーの子オブジェクトに仕事を委任し、 それを階層の基底クラスやインターフェースを介して行うなら、 これは間違いなくコンポジットです。
単純な形状と複合形状
この例は、 単純な形状からなる複雑な形状をどう作成し、 単純形状と複合形状をどう同様に扱うかを示します。
shapes
shapes/Shape.java: 共通の形状インターフェース
shapes/BaseShape.java: 基本的な機能を持った抽象的形状
shapes/Dot.java: 点
shapes/Circle.java: 円
shapes/Rectangle.java: 四角形
shapes/CompoundShape.java: 他の形状オブジェクトから構成される複合形状
editor
editor/ImageEditor.java: 形状エディター
Demo.java: クライアント・コード
OutputDemo.png: 実行結果