模式定义

将对象组合成树形结构以表示“部分–整体”的层次结构,Composite使得用户对单个对象和组合对象的使用具有一致性(稳定)

类图

要点总结

  • Composite模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化为“一对一”的关系,使得客户代码可以一致地(复用)处理对象和对象容器,无需关系处理的是单个的对象,还是组合的对象容器
  • 将“客户代码与复杂的对象容器结构”解耦是Composite的核心思想解耦之后,客户代码将于纯粹的抽象接口–而给对象容器的内部实现结构–发生依赖,从而更能“应对变化”
  • Composite模式在具体实现中,可以让父对象中的子对象反向追溯,如果父对象有频繁的遍历需求,可使用缓存技巧来改善效率

Go语言代码实现

工程目录

composite.go

package Compositeimport "fmt"type Component interface {Traverse()
}type Leaf struct {value int
}func NewLeaf (value int) *Leaf{return &Leaf{value: value}
}func (l *Leaf) Traverse() {fmt.Println(l.value)
}type Composite struct {children []Component
}func NewComposite() * Composite{return &Composite{children: make([]Component, 0)}
}
func (c *Composite) Add (component Component) {c.children = append(c.children, component)
}func (c *Composite) Traverse() {for idx, _ := range c.children{c.children[idx].Traverse()}
}

composite_test.go

package Compositeimport ("fmt""testing"
)func TestComposite_Traverse(t *testing.T) {containers := make([]Composite, 4)for i := 0; i< 4; i++ {for j := 0; j < 3 ; j++ {containers[i].Add(NewLeaf(i * 3 + j))}}for i := 0; i < 4; i++ {containers[0].Add(&containers[i])}for i := 0; i < 4; i++{containers[i].Traverse()fmt.Printf("Finished\n")}
}

设计模式--组合(Component)模式相关推荐

  1. PHP设计模式——组合器模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 组合模式(有时候又叫做部分-整体模式),将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对 ...

  2. 设计模式-组合+策略模式

    实现一个中间部件对象,也就是可以添加叶子节点的对象,最终这个中间件部件装载在根form对象上.这个中间件的好处是可以按照实际业务需求进行分组.本例中划分了三种业务,分别是名字分组,地址分组和测试分组. ...

  3. 设计模式---组合Composite模式

    1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 在绘图编辑器和图形捕捉系统这样的图形应用程 ...

  4. 设计模式---组合模式

    设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...

  5. 设计模式学习笔记——组合(Composite)模式

    设计模式学习笔记--组合(Composite)模式 @(设计模式)[设计模式, 组合模式, composite] 设计模式学习笔记组合Composite模式 基本介绍 组合案例 类图 实现代码 Ent ...

  6. [Head First设计模式]生活中学设计模式——组合模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  7. Java设计模式 —— 组合模式(Composite)

    Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...

  8. 设计模式 | 组合模式及典型应用

    本文的主要内容: 介绍组合模式 示例 组合模式总结 源码分析组合模式的典型应用 java.awt中的组合模式 Java集合中的组合模式 Mybatis SqlNode中的组合模式 组合模式 树形结构不 ...

  9. JAVA设计模式--组合模式

    目录 一.什么是组合模式 二.组合模式的适用性 三.组合模式的结构 四.组合模式的安全性和透明性 五.组合模式的优缺点 六.总结 一.什么是组合模式 组合(Composite)模式是一种对象的行为模式 ...

最新文章

  1. php7做了哪些优化,PHP语言学习之PHP7做了哪些优化
  2. modelsim-win64-10.1c的安装和基本使用
  3. JavaScript中的this的指代对象详解
  4. Exchange+2010实验手册
  5. or计算机二级,计算机二级VF历年上机试题or答案
  6. ThinkPHP的A方法,R方法,M方法,D方法区别
  7. Python 一键提取PDF版论文表格数据
  8. ps人物换脸移花接木
  9. Elasticseach api keys are not enabled
  10. linux下qt打印功能如何实现,Qt Graphics-View的打印功能实现
  11. jekyll 配置环境变量——zsh
  12. 第四章 线程切换与调度——操作系统的发动机
  13. WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
  14. 雨林木风 linux操作系统,“雨林木风”操作系统门户正式上线
  15. 【语音算法】语音的预处理--端点检测
  16. (超详解)C语言实现通讯录
  17. 【PHP开发】Mac系统配置MAMP+Thinkphp框架环境 教程(一)
  18. wifi p2p 调试
  19. Java入门篇——安装Java SE14
  20. 认知天性——读书笔记

热门文章

  1. mysql varchar(max)_等价于MySQL中的varchar(max)?
  2. centos7 mysql二进制_centos7+mysql5.7二进制安装
  3. 柴油发电机为什么会出现故障?需要注意的5个常见原因
  4. 数据中心余热回收再思考
  5. 必须重视数据中心的规划设计
  6. ML之catboost:基于自带Pool数据集实现二分类预测
  7. 成功解决AttributeError: module ‘tornado.web‘ has no attribute ‘asynchronous‘
  8. Dataset之Facades:Facades数据集的简介、安装、使用方法之详细攻略
  9. ML之FE:结合Kaggle比赛的某一案例细究特征工程(Feature Engineering)思路框架
  10. Solr分页与高亮(使用SolrNet实现)