本周学习总结

发布于: 16 小时前

对组合模式的一些理解

什么是组合模式

组合(Composite)模式是一种对象的行为模式。将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

组合模式的本质:统一叶子对象和组合对象。

组合模式的目的:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作。

组合模式的适用性

在开发中, 我们经常可能要递归构建树状的组合结构,如果碰到需使用对象树来描述或实现的功能,都可以考虑使用组合模式,比如读取XML文件,或是对语句进行语法解析等。

组合模式涉及的角色及其职责如下:

组合模式允许你将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。

组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

组合部件(Component):它是一个抽象角色,为要组合的对象提供统一的接口。

叶子(Leaf):在组合中表示子节点对象,叶子节点不能有子节点。

合成部件(Composite):定义有枝节点的行为,用来存储部件,实现在Component接口中的有关操作,如增加(Add)和删除(Remove)。

组合模式的安全模式和透明模式

安全模式是把树枝节点和树叶节点彻底分开,树枝节点单独拥有用来组合的方法,这种方法比较安全。但由于不够透明,所以树叶节点和树枝节点将不具有相同的接口,客户端的调用需要做相应的判断,带来了不便

透明模式是把组合使用的方法放到抽象类中,不管叶子对象还是树枝对象都有相同的结构,这样做的好处就是叶子节点和树枝节点对于外界没有区别,它们具备完全一致的行为接口。但因为Leaf类本身不具备add()、remove()方法的功能,所以实现它是没有意义的。

组合模式的优点:

高层模块调用简单。一棵树形机构中的所有节点都是Component,局部和整体对调用者来说没有任何区别,高层模块不必关心自己处理的是单个对象还是整个组合结构

缺点:使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒转原则。

用户头像

Geek_zhangjian

关注

还未添加个人签名 2019.11.28 加入

还未添加个人简介

评论

发布
暂无评论
本周学习总结