秒懂设计模式之组合模式(Composite Pattern)

设计模式汇总篇,一定要收藏:

永不磨灭的设计模式(有这一篇真够了,拒绝标题党)

文章目录

  • 概述
    • 类型
    • 难度
  • 定义
  • 使用场景
  • UML类图
  • 实例
  • 第一,设计一个个体与组合通用的接口
  • 第二,组合类
  • 第三,叶子节点
  • 第四,客户端
  • 技术要点总结
  • 优缺点
  • 优点
  • 缺点
  • 总结

概述

组合模式出镜率不算特别高,但是一旦出境说明这个问题如果不使用它将变得非常困难。Android的View体系的设计方式就是组合模式非常经典的成功案例。

类型

结构型(structural)

难度

3颗星

定义

组合模式允许以相同的方式处理单个对象和对象的组合体

不理解不要紧,接着往下看

使用场景

  • 当你的程序结构有类似树一样的层级关系时,例如文件系统,视图树,公司组织架构等等
  • 当你要以统一的方式操作单个对象和由这些对象组成的组合对象的时候。

UML类图

此类持有一个,并继承。

第三,叶子节点

叶子节点就是单个对象了,我们要使用合适的方式处理那些叶子节点不支持的对外接口方法。因为用户使的时候只会看到对外暴露的统一接口,他不知道此对象是叶子节点还是组合对象。

第四,客户端

我们来看看是否达到了我们的设计目的:以统一的接口操作单个对象与其组合对象。

首先构建一个组合对象。模拟构建一家公司,公司下设行政部门和IT部门,还有一个天津分公司,而天津分公司又下设一个行政部门和IT部门。

然后我确定查询这个公司任何部门的员工人数。我们可以看到在查询过程中,我们没有判断当前对象到底是什么部门对象,都是以统一的接口在操作。

输出:

技术要点总结

  • 组合模式有所谓的透明方式安全方式,是对于使用者而言的

透明方式将所有对外操作都放在,叶子节点也得提供这些接口,虽然它实际上不支持这些操作。而安全方式只将叶子节点与组合对象同时提供的操作放在。

为啥叫透明方式呢为用户使用的时候根本不管是叶子节点,还是组合对象,反正看到的接口都一样。这样就不安全了,因为万一这个对象是个叶子节点,假设你又使用了一个它不能提供的操作,例如,就出问题了…

  • 通用操作定义在中,根据使用方式不同,透明方式与安全方式,有一定的不同
  • 组合节点不仅要继承,而且要持有一个的集合
  • 叶子对象只继承即可

优缺点

优点

  • 可以递归组合成任意复杂的对象
  • 可随意增加新类型的与的类
  • 简化了客户端代码,因为不论对象多么复杂客户端都是以同一套接口操作

缺点

  • 如果需要确定某个组件是特殊组织,然后针对它做特殊的操作,就需要在运行时判断。
  • 类多了

总结

设计模式值得你可以练习!

GitHub源码地址:design-patterns

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92081 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月2日
下一篇 2021年4月2日

相关推荐