go-pattern-examples/structure/13_composite/README.md
2020-05-01 23:43:34 +08:00

26 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 复合模式
复合模式目的是为了实现对一类对象的一致性访问复合模式也叫组合模式但是不同于go本身的组合设计理念go本身的组合宽泛的多用于结构与结构、结构与接口、接口与接口的嵌套组合.
我认为用复合表述更准确一些,复合模式的要点在于设计复合类型,兼容多种有相关关系类型,使得外部可以使用的使用方式使用相同接口(往往可能需要传入不同的参数)访问对象或者对象集。
复合模式在内存中的数据结构逻辑上常常表达为一个树结构,用于统一叶子节点对象和非叶子节点对象的访问,很明显复合模式可用于与类别相关的问题处理,并且尤其擅长类别相似的问题的处理。
所以反过来想,当遇到分类相关并且关系可以表达为<整体-局部>关系的,或者遇到可以用树状逻辑梳理和表达的问题时候,复合模式可能就是最佳的问题解决思路了
引申一下,在我们处理算法的时候,往往是一个输入一个输出,但是在处理过程中往往是要将问题进行分类,所以复合模式思想也可强化算法思路.
符合模式中的核心重点是一个 :复合对象,这个复合对象,能同时代表叶子节点和非叶子节点的对接。
现实生活中服务装供应商库存盘点中的衣物分类就是一个很好的例子,
- 服装
- 男装
- 女装
- 上套裙
- 短吊带
- 鞋帽 --->f鞋帽从最基础通用性上来讲不分男女
![一个示例](../../images/Composite.png)