当前位置: 七九推 > IT编程>软件设计>设计模式 > 23种设计模式之组合模式

23种设计模式之组合模式

2022年06月11日 设计模式 我要评论
组合模式的定义定义: 将对象组合成树形结构以表示 "部分-整体" 的层次结构,使得用户对单个对象和组合对象的使用具有一致性.通俗的说, 就是实现了树形结构通用类图如下:其中的三个角色如下:compon

组合模式的定义

定义: 将对象组合成树形结构以表示 "部分-整体" 的层次结构,使得用户对单个对象和组合对象的使用具有一致性.

通俗的说, 就是实现了树形结构

通用类图如下:

23种设计模式之组合模式

 

其中的三个角色如下:

  1. component 抽象构件角色: 定义参加组合对象的共有方法和属性, 可以定义一些默认的行为或属性
  2. aggregate 树枝构件: 组合树枝节点和叶子节点形成一个树形结构
  3. leaf 叶子构件: 其下再没有其的分支, 是遍历的最小单位

抽象构件角色代码:

23种设计模式之组合模式

 

树枝构件代码:

23种设计模式之组合模式

 

叶子构件代码:

23种设计模式之组合模式

 

场景类代码:

23种设计模式之组合模式

 

组合模式的应用

组合模式的优点:

  1. 高层模块调用简单. 一棵树形机构中所有的节点都是 component, 局部和整体对调用者来说没有区别, 高层模块不必关心自己处理的是单个对象还是组合结构, 简化了高层模块的代码
  2. 节点自由增加. 如果想增加一个树枝节点、树叶节点, 只要找到它的父节点就可以, 非常容易扩展,符合开闭原则,对以后的维护非常有利

组合模式的缺点:

我们在使用的时候, 树叶和树枝的定义直接使用了实现类, 这在面向接口编程上是很不恰当的, 与依赖倒置原则冲突, 限制了接口的影响范围

组合模式的使用场景:

  1. 维护和展示部分-整体关系的场景, 如树形菜单、文件和文件夹管理
  2. 从一个整体中能够独立出部分模块或功能的场景

只要是树形结构, 就要考虑使用组合模式, 只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深, 应该考虑组合模式

组合模式的扩展

1.真实的组合模式

在上边的例子中, clien 中进行了树的组装, 而在实际项目中, 数据通常在数据库中, 我们直接从数据库将数据读取放到树上就可以了

2.透明的组合模式

组合模式有两种实现: 透明模式和安全模式. 上面的实现就是安全模式, 透明模式的类图如下:

23种设计模式之组合模式

 

透明模式就是把用来组合使用的方法放到抽象类中, 通过判断getchild() 的返回值确定是叶子节点还是树枝节点, 在 leaf 中实现 add等方法要抛出异常, 如果处理不当, 会在运行期出现问题

在透明模式下, 遍历整个树形结构是比较容易的, 不用进行强制类型转换.

透明模式的好处就是它基本遵循了依赖倒置原则, 方便系统扩展

3.组合模式的遍历

有的时候不光要从上向下遍历, 还要从下往上遍历, 也就是通过子节点要找到他的父节点, 这时就要在抽象构件角色中添加 getparent 方法, 也就是在每个节点都增加一个父节点对象


 

 

可以关注一下鄙人的公众号, 谢谢各位了!

(0)
打赏 微信扫一扫 微信扫一扫

相关文章:

  • 设计模式(Design Patterns)

    设计模式(Design Patterns)一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,…

    2022年06月11日 软件设计
  • 6大设计原则之迪米特法则

    6大设计原则之迪米特法则

    迪米特法则的定义迪米特法则也称为最少知识原则,一个对象应该对其他对象有最少的了解. 通俗的讲,一个类应该对自己需要耦合或调用的类知道的最少,被调用类的内部是如何... [阅读全文]
  • 模板方法模式

    模板方法模式

    模板方法模式标签: 设计模式初识模板方法模式定义定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的... [阅读全文]
  • 设计模式那些事

    设计模式那些事

    什么是设计模式?我们为什么要学习和使用设计模式?设计模式又有哪些?这里博主根据自己所了解的内容做一简单介绍。1、什么是设计模式?设计模式(Design Patt... [阅读全文]
  • 设计模式系列 - 过滤器模式

    设计模式系列 - 过滤器模式

    过滤器模式通过使用不同的过滤标准来筛选数据,解耦了多个数据源的数据筛选操作。介绍过滤器模式属于结构型模式,它通过将多个不同的过滤标准结合起来从而达到一个统一的过... [阅读全文]
  • 面向对象的六大原则之 单一职责原则——SRP

    面向对象的六大原则之 单一职责原则——SRP

    srp = single responsibility principle定义:就一个类而言,应该只有一个能引起他变化的原因。通俗的说,即一个类只负责一项职责。... [阅读全文]

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2023  七九推 保留所有权利. 粤ICP备17035492号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com