前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式学习笔记之组合模式模式

设计模式学习笔记之组合模式模式

作者头像
小端
发布2018-04-16 11:13:49
5830
发布2018-04-16 11:13:49
举报
文章被收录于专栏:java架构师java架构师

我们常常会遇到一类具有“容器”特征的对象,他们既是容器,本身也是对象。比如,公司人员管理中的人,他们是处于不同层级,每个层的人下边,又有下属。也就是数的结构。

而在客户端处理这种对象时,如果耦合性考虑的不好,就出现这种情况:

客户端要提前知道对象的结构,判断对象的类型,然后区分枝节点和叶子节点,区别处理。而在处理枝节点时,又要递归处理。

问题:耦合性过强,一旦变更类(而非接口)内部结构,讲引起客户代码的变化;类的实现细节暴漏给了客户端。

解决:将对象组合成树形结构以表示“部分-整体”的层次关系。对客户端来说,他只认接口,无论是来了枝、还是叶,无差别。

将“客户代码与复杂的对象容器结构”解耦是Composite模式的核心思想

以下是示例代码,均来自于网上。

解耦前的示例代码:

解耦后的示例代码:

彻底解耦。

不过出现了新的问题,add、remove等方法,对于SingtenBox类没有意义

而接口,因为把这些方法提了上去,也违背了单一职责原则。

这真是需要平衡啊

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2012-11-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档