Androidのいたるところで見られる組み合わせパターンの応用の1つが、ViewクラスとViewGroupクラスの使用です。アンドロイドのUIデザインでは、ほとんどすべてのウィジェットとレイアウトクラスがこの2つのクラスに依存しています。
Combinationパターン、Compositeパターンは非常に賢いパターンです。ほとんどのオブジェクト指向システムはCompositeパターンを適用しています。
1.意図
オブジェクト View と ViewGroup をツリー構造に結合し、"part-whole" 階層を表現します。
コンポジション・パターンにより、ユーザーは単一のオブジェクト View と組み合わされたオブジェクト ViewGroup を一貫して使用することができます。
ホットターム:Part-Whole コンテナ-コンテンツ ツリー構造 一貫性 リーフ コンポジション セキュリティ 透明性
2.構造
3.コード
Viewクラスの実装です:
public class View{
//... ...
//余計なメソッドを省く
}
ViewGroupの実装:
public abstract class ViewGroup extends View{
/**
* Adds a child view.
*/
public void addView(View child) {
//...
}
public void removeView(View view) {
//...
}
/**
* Returns the view at the specified position in the group.
*/
public View getChildAt(int index) {
try {
return mChildren[index];
} catch (IndexOutOfBoundsException ex) {
return null;
}
}
//other methods
}
4.効果
.構造化パターン .
.基本オブジェクトと組み合わせオブジェクトの両方を含むクラス階層を定義します。この構造により、基本オブジェクトと組み合わせオブジェクトの使用を柔軟に制御できます。
.クライアント・コードの簡素化.基本オブジェクトと組み合わせオブジェクトの間に一貫性があるため、ユーザが両者を区別する必要がありません。
.新しいタイプのコンポーネントの追加が容易になります。
.デザインがより一般的になります。





