设计模式九--组合模式
2018-10-15 本文已影响22人
朽木亦自雕
定义
将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
角色
1:抽象构建(Component)角色
该角色定义参加组合对象的共有方法和共有属性,规范一些默认的行为接口
public interface Component
{
public void operation();
}
2:叶子构建(Leaf)角色
该角色是叶子对象,其下没有其他的分支,定义出参加组合的原始对象的行为
public class Leaf implements Component
{
@Override
public void operation()
{
}
}
3:树枝构建(Composite)角色
该角色代表参加组合的、其下所有分支的树枝对象,它的作用是将树枝和叶子组合成一个树形结构,并定义出管理子对象的方法
public class Composite implements Component{
//子节点容器
private ArrayList <Component> componentList = new ArrayList<Component> ();
//添加构件
public void add(Component c){
this.componentList.add(c);
}
//删除构件
public void remove(Component c){
this.componentList.remove(c);
}
//获取子构件
public ArrayList<Component> getChild(){
return this.componentList;
}
@Override
public void operation(){
}
}
调用示例
public class Client{
public static void main(String [] args){
//创建根节点
Composite root = new Composite();
root.operation();
//创建子节点和叶子节点
Composite branch = new Composite();
Leaf leaf = new Leaf();
挂载
root.add(branch);
branch.add(leaf);
}
public static void display(Composite root){
for(Component c : root.getChild()){
// 如果是叶子就直接执行逻辑
if(c instanceof Leaf){
c.operation();
}else{
// 如果不是叶子就执行逻辑以后递归遍历
c.operation();
display((Component) c);
}
}
}
}
优点
1:高层模块调用简单
2:节点增加自由
缺点
1:不易控制树枝构件类型
2:不易使用继承方法来增加新的行为
使用场景
1:需要描述对象层级关系(文件目录等等)
2:需要忽略个体和整体的区别,平等对待所有组件的
参考资料:设计模式(java)