一、组合模式的概念
组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。掌握组合模式的重点是要理解清楚 “部分/整体” 还有 ”单个对象“ 与 "组合对象" 的含义。
抽象组件(Component):给参加组合的对象定义出公共的接口及其默认行为,可以用来管理所有的子对象。合成对象通常把它所包含的子对象当做类型为Component的对象。
树枝组件(Composite):代表参加组合的有下级子对象的对象。
树叶组件(Leaf):树叶对象是没有下级子对象的对象,定义出参加组合的原始对象的行为。
二、组合模式的实现
//抽象组件
public abstract class Component{
public String name;
public Component(String name){
this.name = name;
}
public void Add(Component component){}
public void Remove(int index){}
public abstract void Display();
}
//树枝组件
public class Composite extends Component{
private ArrayList<Component> list = new ArrayList<>();
public Composite(String name){
super(name);
}
public void Add(Component component){
list.add(component);
}
public void Remove(int index){
list.remove(index);
}
public void Display(){
for(Component c:list){
System.out.println(c.name);
}
}
}
//树叶组件
public class Leaf extends Component{
public Leaf(String name){
super(name);
}
public void Display(){
System.out.println(this.name);
}
}
三、组合模式的应用
计算机的文件系统由文件和目录组成,目录下面也可以包含文件或目录,计算机的文件系统是递归结构,可以使用组合模式来进行组织。
四、组合の其他问题
1、客户端可以一致的使用组合结构或其中单个对象
2、设计更加抽象,业务规则复杂的对象,组合模式实现就越困难,且不是所有的方法都与叶子对象关联
五、Reference
六、Resource