Java设计模式之组合模式

来源:互联网 发布:敬汉卿 知乎 编辑:程序博客网 时间:2024/06/14 09:00

转发请注明原文:http://blog.csdn.net/qq_34911465/article/details/63748421

组合模式

顾名思义,组合模式,就是将程序的各个部分组合在一起,每个部分都有联系。
首先定义一个接口:

public abstract class Component{  protected String name;  public Component(){    name = "";  }  public Component(String _name){    if(_name!=null)name = _name;    else name = "";  }  //添加组件和删除组件的方法  public void addComponent(Component c){}  public void removeComponent(Component c){}  public void display(int i){}}

具体的组件类,这个类不能再包含其他的组件,故我们给它命名为叶子:

public class Leaf extends Component{  public Leaf(){    super();  }  public Leaf(String name){    super(name);  }  //这个类里面无法再添加其他的组件,而且这里的组件也无法删除  public void addComponent(Component c){    System.out.println("Cannot add the component");  }  public void removeComponent(Component c){    System.out.println("Cannot remove the component");  }  public void display(int i){    for(int k = 0 ; k < i + 2 ; k++){      System.out.print("--");    }    System.out.println(this.name);  }}

定义一个组件类,这个类里面可以添加其他的组件:

import java.util.ArrayList;public class Composite extends Component{  protected ArrayList<Component> list;  public Composite(){    super();    init();  }  public Composite(String name){    super(name);    init();  }  public void init(){    list = new ArrayList<Component>();  }  //这个组件可以拥有子组件,因此也可以删除子组件。  public void addComponent(Component c){    if(c!=null)list.add(c);  }  public void removeComponent(Component c){    if(c!=null)list.remove(c);  }  public void display(int i){    for(int k = 0 ; k < i + 2 ; k++){      System.out.print("-");    }    System.out.println(this.name);    for(int k = 0 ; k < list.size() ; k++){      list.get(k).display(i+1);    }  }}

这以上就是构建组合模式的基本过程,简单总结一下,就是先建立一个接口,不同类型的组件可以同时也需要在这个接口的基础上建立。
接着再建立一个叶子节点,代表无法添加子组件的类,同时实现接口中的方法,最后再创建一个组件类,在组件类中可以添加子组件,因此要使用某种数据结构来保存子组件。
使用组合模式的优点是可以将多个不同的类组合起来,在最高的节点可以通过某种方式访问到下面的节点。同时在用户的使用过程中更加统一。

0 0