您的位置:首页 > 编程语言 > Java开发

Java设计模式之组合模式

2017-03-19 22:52 477 查看

转发请注明原文: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);
}
}
}


这以上就是构建组合模式的基本过程,简单总结一下,就是先建立一个接口,不同类型的组件可以同时也需要在这个接口的基础上建立。

接着再建立一个叶子节点,代表无法添加子组件的类,同时实现接口中的方法,最后再创建一个组件类,在组件类中可以添加子组件,因此要使用某种数据结构来保存子组件。

使用组合模式的优点是可以将多个不同的类组合起来,在最高的节点可以通过某种方式访问到下面的节点。同时在用户的使用过程中更加统一。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java设计模式