设计模式类型
结构型设计模式
设计模式名称
组合模式
模式定义
组合模式(Composite Pattern)属于类的结构型模式之一,在树型结构中,组合模式定义了一个抽象构建类,它既可以代表叶子,又可以代表容器(子节点),而客户端针对该抽象构建类进行编程,无需知道它道理表示的是叶子还是容器,可以对其进行统一处理。
同时容器对象与抽象构件类之间还建立了一个聚合关联关系,在容器对象中即可以包含叶子,也可以包含容器,一次实现递归组合,形成一个树形结构。
UML角色
1、Component抽象构件角色:
接口或抽象类,为叶子构建和容器构建声明接口,在该角色中可以包含所有子类共有行为的声明和实现。在抽象构建中定义了访问及管理它的子构建的方法,如增加子构建,删除子构建,获取子构建等。
2、Leaf叶子构件角色:
他在组合结构中表示叶子节点对象,叶子节点没有子节点,它实现了在抽象构建中定义的行为。对于接口中定义的其他管理子构建的方法,通常是空处理或抛异常处理。
3、Composite容器构件:
他在组合结构中表示容器节点,它提供一个集合,用于存储子节点,实现了在抽象接口中定义的行为,包括那些访问及管理自构建的方法,在其业务方法中可以使用递归调用其子节点的业务方法
//递归
public void runTestcase() { System.out.println(“执行测试用例集合:” + name); for (Object object : list){ ((Component) object).runTestcase(); }}
接口使用:
安全组合模式
透明组合模式
设计模式更注重透明性,安全性问题采用异常、空处理
应用场景
1、在具有整体和部分的层次结构的对象组合中,希望通过一种方式忽略整体与部分的差异,客户端可以一致的对待它们
2、面向对象语言开发中需要处理一个树形结构
3、在一个系统中能够分离出叶子对象和容器对象,而且它们的类型不固定,需要增加一些新的类型
优缺点
优点
1、清楚的定义分层次的复杂对象,让客户端忽略了层次的差异,方便对整个层次结构进行控制
2、扩展新的容器构件和叶子构件都很容易,无需修改原有的类库,并且可以保持原来的层次结构体系,符合“开放封闭”原则
缺点
1、比较难以对构件类型进行限制,当业务发生变化时,我们希望对某些容器构件所接收的子构件加以限制,但所有构件继承了相同的接口,因此需要在运行时进行构件的判断,实现过程比较复杂。
git地址
https://github.com/wonlon/Design-patterns