JDK中的设计模式之组合模式

一、组合模式概述

             组合模式将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
       组合模式适用于:1、你想表示对象的部分-整体层次结构;2、你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。
       组合模式的类图如下:

       典型的组合模式对象结构如下图:

      

二 、JDK中的组合模式

     组合模式使我们在树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。组合模式让我们可以优化处理递归或分级数据结构。有许多关于分级数据结构的例子,使得组合模式非常有用武之地。
       在JDK中使用了组合模式的例子是AWT中的Component-Container体系Container继承于Component,而Container中有可以包含有多个Component,因为Container实际上也是Component,因而Container也可以包含Container。这样通过Component-Container结构的对象组合,形成一个树状的层次结构。这也就是Composite模式所要做的。


三 、关于组合模式的思考

    组合模式解耦了客户程序与复杂元素内部结构,从而使客户程序可以向处理简单元素一样来处理复杂元素。如果你想要创建层次结构,并可以在其中以相同的方式对待所有元素,那么组合模式就是最理想的选择。
    组合模式实现起来并不复杂,下面给出了一个Composite模式简单的Java实现:
public abstract class Component{
	public abstract void operation();
	public void add(Component component){};
	public void remove(Component component){};
}

import java.util.*;

public class Composite extends Component{
	String name;
	ArrayList children = new ArrayList();
	
	public Composite(String name){
		this.name = name;
	}
	
	public void add(Component component){
		children.add(component);
	}
	
	public void remove(Component component){
		children.remove(component);
	}
	
	public void operation(){
		System.out.println(name);
		Iterator iterator = children.iterator();
		while(iterator.hasNext()){
			Component child = (Component)iterator.next();
			child.operation();
		}
 	}
}

public class Leaf extends Component{
	String name;
	
	public Leaf(String name){
		this.name = name;
	}
	
	public void operation(){
		System.out.println(name);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值