组合模式(结构型模式)
1> 对象容器的问题(俄罗斯套娃)
-
在面向对象系统中,我们常会遇到一类具有“容器”特征的对象——即它们在充当对象的同时,又是其他对象的容器。
-
-
2> 动机( Motivation )
-
上述描述的问题根源在于:客户代码过多地依赖干对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展性等弊端。
-
如何将“客户代码与复杂的对象容器结构”解耦?让对象容器自己来实现自身的复杂结构,从而使得客户代码就像处理简单对象一样来处理复杂的对象容器?
3> 意图( Intent )
- 将对象组合成树形结构以表示“部分—整体” 的层次结构。Composite使得用户对单个对象和组合对象的使用具有一致性。
4> 结构(Structure)
5> 俄罗斯套Box模式
- 将客户的一对多关系转换成同一的处理方式,而不需要考虑对象内部的细节复杂程度,采用相同的方式一致处理对象和对象容器,从而保护了对象的内部细节。
5.1 客户代码与纯粹的抽象接口发生依赖关系
public interface IBox//客户只需要和IBox发生依赖关系
{
void Process();
void Add(IBox box);
void Remove(IBox box);
}