设计模式-结构型设计模式-6.组合模式(php)

设计模式类型

结构型设计模式

设计模式名称

组合模式

模式定义

组合模式(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值