Design Patterns 结构模式 之 Composite 模式

Design Patterns 结构模式 之 Composite 模式
组合模式:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.
1),安全式
[img]http://dl.iteye.com/upload/picture/pic/66848/490ca3ac-f90a-3e7b-9f72-3d69d8205b7a.bmp[/img]
2),透明式
[img]http://dl.iteye.com/upload/picture/pic/66846/36ca6859-1a6a-31d6-84dc-b37f84480139.gif[/img]
组合(Composite)模式主要角色:
1.Component角色
2.Leaf角色
3.Composite角色

/**
* 组件抽象角色
*/
public interface Component {

public void run();

}


/**
* 叶子角色
*/
public class Leaf implements Component{

public void run(){
System.out.println(" run invoked...");
}
}


//组合角色
实现组件角色接口,并且添加,删除的也是组件角色
Composite本来可以再包含Leaf和Composite的。而 Leaf和Composite 又都属于 Component,所以增加,删除 的是Component
组合模式主要分为2种

1 透明式

添加Component对象的操作定义在Component角色中,这样的话不仅Composite需要实现这些方法,Leaf也需要实现这些方法,
而这些方法对于Leaf来说没有任何意义,不过将系统实现统一起来了,因此对用户来说透明(用户无需区分Composite还是Leaf)
,因为这些角色中都具备这些方法。


2 安全式


添加Component对象的操作定义在Composite角色中,这样的话Leaf就无需实现这些方法(因为Leaf本身根本不需要实现这些方法)
  
public class Composite implements Component{

List<Component> list = new ArrayList<Component>();

//添加
public void addComponent(Component component){
list.add(component);
}
//删除
public void removeComponent(Component component){
list.remove(component);
}

//get
public List<Component> getAll(){
return list;
}
public void run(){
for(Component component : list){
component.run();
}
}
}



public class Client {   

public static void main(String[] args){
Leaf leaf1 = new Leaf();
Leaf leaf2 = new Leaf();
Leaf leaf3 = new Leaf();

Composite composite = new Composite();

composite.addComponent(leaf1);
composite.addComponent(leaf2);

Composite composite1 = new Composite();
composite1.addComponent(composite);
composite1.addComponent(leaf3);

composite1.run();

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值