1. 基本定义
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。
我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。
2. 示意图
Android的UI 组件,ViewGroup 和View 之间就属于典型的组合模式。
![](https://img.haomeiwen.com/i10994442/c214a13cfb8bf84e.png)
3. 解决的问题
意图:将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
主要解决:它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
如何解决:树枝和叶子实现统一接口,树枝内部组合该接口。
4. 代码实现
class ViewGroup extends View{
private List<View> views;
public ViewGroup(String name) {
super(name);
views = new ArrayList<View>();
}
public void addView(View view) {
views.add(view);
}
public void removeView(View view) {
views.remove(view);
}
@Override
void draw() {
for (View view : views) {
if (view instanceof ViewGroup) {
System.out.println("开始绘制ViewGroup " + view.getName() + "-----------");
view.draw ();
System.out.println("结束绘制ViewGroup " + view.getName() + "-----------");
} else {
System.out.println("开始绘制View " + view.getName());
}
}
}
}
class View {
String name;
public View(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public View() {
}
void draw() {
System.out.println("开始绘制View" + getName());
}
}
客户端代码
public class CompositeModelTest {
public static void main(String[] args) {
ViewGroup vg_child = new ViewGroup("layout");
View view_btn = new View("Button");
View view_tv = new View("TextView");
View view_img = new View("ImageView");
vg_child.addView(view_btn);
vg_child.addView(view_tv);
vg_child.addView(view_img);
View view_s = new View("View_Single");
ViewGroup vg = new ViewGroup("Root");
vg.addView(view_s);
vg.addView(vg_child);
vg.draw();
}
}
程序运行结果
开始绘制View View_Single
开始绘制ViewGroup layout-----------
开始绘制View Button
开始绘制View TextView
开始绘制View ImageView
结束绘制ViewGroup layout-----------
网友评论