设计模式--组合(Component)模式
模式定义
将对象组合成树形结构以表示“部分–整体”的层次结构,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)模式相关推荐
- PHP设计模式——组合器模式
声明:本系列博客参考资料<大话设计模式>,作者程杰. 组合模式(有时候又叫做部分-整体模式),将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对 ...
- 设计模式-组合+策略模式
实现一个中间部件对象,也就是可以添加叶子节点的对象,最终这个中间件部件装载在根form对象上.这个中间件的好处是可以按照实际业务需求进行分组.本例中划分了三种业务,分别是名字分组,地址分组和测试分组. ...
- 设计模式---组合Composite模式
1.意图 将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. 2.动机 在绘图编辑器和图形捕捉系统这样的图形应用程 ...
- 设计模式---组合模式
设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...
- 设计模式学习笔记——组合(Composite)模式
设计模式学习笔记--组合(Composite)模式 @(设计模式)[设计模式, 组合模式, composite] 设计模式学习笔记组合Composite模式 基本介绍 组合案例 类图 实现代码 Ent ...
- [Head First设计模式]生活中学设计模式——组合模式
系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...
- Java设计模式 —— 组合模式(Composite)
Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...
- 设计模式 | 组合模式及典型应用
本文的主要内容: 介绍组合模式 示例 组合模式总结 源码分析组合模式的典型应用 java.awt中的组合模式 Java集合中的组合模式 Mybatis SqlNode中的组合模式 组合模式 树形结构不 ...
- JAVA设计模式--组合模式
目录 一.什么是组合模式 二.组合模式的适用性 三.组合模式的结构 四.组合模式的安全性和透明性 五.组合模式的优缺点 六.总结 一.什么是组合模式 组合(Composite)模式是一种对象的行为模式 ...
最新文章
- php7做了哪些优化,PHP语言学习之PHP7做了哪些优化
- modelsim-win64-10.1c的安装和基本使用
- JavaScript中的this的指代对象详解
- Exchange+2010实验手册
- or计算机二级,计算机二级VF历年上机试题or答案
- ThinkPHP的A方法,R方法,M方法,D方法区别
- Python 一键提取PDF版论文表格数据
- ps人物换脸移花接木
- Elasticseach api keys are not enabled
- linux下qt打印功能如何实现,Qt Graphics-View的打印功能实现
- jekyll 配置环境变量——zsh
- 第四章 线程切换与调度——操作系统的发动机
- WPF的TextBox抛出InvalidOperationException异常:Cannot close undo unit because no opened unit exists.
- 雨林木风 linux操作系统,“雨林木风”操作系统门户正式上线
- 【语音算法】语音的预处理--端点检测
- (超详解)C语言实现通讯录
- 【PHP开发】Mac系统配置MAMP+Thinkphp框架环境 教程(一)
- wifi p2p 调试
- Java入门篇——安装Java SE14
- 认知天性——读书笔记
热门文章
- mysql varchar(max)_等价于MySQL中的varchar(max)?
- centos7 mysql二进制_centos7+mysql5.7二进制安装
- 柴油发电机为什么会出现故障?需要注意的5个常见原因
- 数据中心余热回收再思考
- 必须重视数据中心的规划设计
- ML之catboost:基于自带Pool数据集实现二分类预测
- 成功解决AttributeError: module ‘tornado.web‘ has no attribute ‘asynchronous‘
- Dataset之Facades:Facades数据集的简介、安装、使用方法之详细攻略
- ML之FE:结合Kaggle比赛的某一案例细究特征工程(Feature Engineering)思路框架
- Solr分页与高亮(使用SolrNet实现)