组合模式

组合模式

组合模式

组合模式:允许你将对象组合成树型结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

 

要点:

1. 组合模式以不遵守单一责任原则换取透明性,让Client将组合和叶节点一视同仁。

2. 在实现组合模式时,有很多设计上的折衷。要根据需求平衡透明性和安全性。

3. 有时候系统需要遍历一个树枝构件的子构件很多次,这时候可以把遍历结果缓存起来。

4. 组合模式的实现中,可以让子对象持有父对象的引用进行反向追溯。

 

实现:

clip_image002

Component:为参加组合的对象声明一个公共接口,不管是组合还是叶节点。

public
 abstract
 class
 Component 
{
public void add(Component component)
{
throw new UnsupportedOperationException();
}

public void remove(Component component)
{
throw new UnsupportedOperationException();
}

public Component getChild(int i)
{
throw new UnsupportedOperationException();
}

public void operation()
{
throw new UnsupportedOperationException();
}
}

 

Leaf:在组合中表示叶节点对象,叶节点没有子节点。

public
 class
 Leaf extends
 Component
{
@Override
public void operation()
{
//your code
}
}

 

Composite:表示参加组合的有子对象的对象,并给出树枝构件的行为。

public
 class
 Composite extends
 Component
{
ArrayList<Component> components = new ArrayList<Component>();

@Override
public void add(Component component)
{
components.add(component);
}

@Override
public void remove(Component component)
{
components.remove(component);
}

@Override
public Component getChild(int i)
{
return components.get(i);
}

@Override
public void operation()
{
for (Component component : components)
{
component.operation();
}
}
}

 

适用性:

以下情况使用Composite模式:

1. 你想表示对象的部分-整体层次结构。

2. 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。

 

优点:

1. 组合模式可以很容易的增加新的构件。

2. 使用组合模式可以使客户端变的很容易设计,因为客户端可以对组合和叶节点一视同仁。

缺点:

1. 使用组合模式后,控制树枝构件的类型不太容易。

2. 用继承的方法来增加新的行为很困难。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值