組合模式:
通俗來說就是,有個容器,然后又好多衍生產品,能在容器里新增,刪除產品。比如:LinearLayout,RelativeLayout等布局容器,可以在容器里面放置TextView,Button,等這些衍生產品。
1.意圖
將對象View和ViewGroup組合成樹形結構以表示"部分-整體"的層次結構(View可以做為ViewGroup的一部分)。
組合模式使得用戶對單個對象View和組合對象ViewGroup的使用具有一致性。
2.結構
針對View和ViewGroup的實際情況,我們選擇安全式的組合模式(在組合對象中添加add,remove,getChild方法),添加少許的注釋,我們把上圖修改為:
3.代碼
View類的實現:
publicclassView{
//省略了無關的方法
}
ViewGroup的實現:
public abstract class ViewGroup extends View{
public void addView(View child) {
}
public void removeView(View view) {
}
public View getChildAt(intindex) {
try{
return mChildren[index];
}catch(IndexOutOfBoundsException ex) {
return null;
}
}
}
4.效果
(1).結構型模式
(2).定義了包含基本對象和組合對象的類層次結構。這種結構能夠靈活控制基本對象與組合對象的使用。
(3).簡化客戶代碼。基本對象和組合對象有一致性,用戶不用區分它們。
(4).使得更容易添加新類型的組件。
(5).使你的設計變得更加一般化。