码迷,mamicode.com
首页 > 其他好文 > 详细

组合模式

时间:2020-03-25 19:05:54      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:检查   就会   缺点   关系   ora   ash   image   客户端   yellow   

定义: 将对象组合成数形结构以表示 "部分-整体"的层次结构

组合模式使客户端对单个对象和组合对象保持一致的方式处理

?

组合模式 -使用场景:

希望客户端可以忽略组合对象单个对象差异时(不管是黑猫白猫,都是猫就是了)

处理一个树形结构时

优点

  1. 清楚地定义了分层次的复杂对象,表示对象的全部或部分层次
  2. 让客户端忽略层次的差异,方便对整个层次结构进行控制
  3. 简化客户端代码
  4. 符合开闭原则(软件实现应该对扩展开放,对修改关闭,其含义是说一个软件应该通过扩展来实现变化,而不是通过修改已有的代码来实现变化的。

其实定义接口,也是为了符合开闭原则

?

组合模式的缺点:

1.限制类型时会比较复杂(全部是抽象层,要在运行时检查)

2.使设计变得更加抽象

3. 判断代码复杂(可以使用 Visitor模式简化操作)

组合-相关设计模式

组合模式和访问者模式(使用访问者模式来 访问组合模式中的递归结构

一个类中可能会定义 一个 level,用来表示根到节点的层数,通过这个层数可以很好的表示树的递归关系

技术图片

?

awt.Container 就是用的组合模式,把成员看成一个个 Component ,这就是一颗树状结构

?

技术图片

?

mybatis 的 sqlNode

?

技术图片

?

技术图片

技术图片

?

也就是,自己 是 sqlNode ,自己的成员变量也有 sqlNode , 等同于可以无限拆分

?

即将 叶子对象 和 组合对象 实现了相同的接口,他们就会有相同的抽象

技术图片

?

技术图片

?

技术图片

?

ArrayList, HashMap, HashSet 各种,都有使用这种组合模式

因为又相同的抽象层 ,所以 addAll 可以 将 Collection里面的并在一起

?

sqlNode > sqlNode 的子类

实现了相同的接口,叶子对象可以和 组合对象进行相同的处理

?

?

?

?

组合模式

标签:检查   就会   缺点   关系   ora   ash   image   客户端   yellow   

原文地址:https://www.cnblogs.com/lyr-2000/p/12568484.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!