文档章节

组合模式

崔钢
 崔钢
发布于 2015/06/15 11:25
字数 747
阅读 129
收藏 7

JAVA等面向对象编程语言一般都会提供大量的数据结构让我们使用。但是它所提供的数据结构一般都是线性的,当然,除了map以外。基本上就是List系列和Set系列,这些都是很常用的。对于处理一般的问题,这些数据结构其实是满足需要的,此外这些数据结构往往还提供对象级的支持,也就是说,它能够处理对象。当然,我们一般不将其称呼为数据结构,而叫做集合类。这种线性结构有一个很大的问题,就是无法描述集合中每个对象之间的关系。或者,不能很直观的直接描述每个对象之间的关系。

此外,其实还有一个问题,那就是人类并不擅长处理非常琐碎的细节问题,同时从这些细节中发现规律往往也会比较困难。相反,人类往往比较擅长使用工具,因此,人类就比较擅长处理抽象的问题。所以使用List这样的线性结构来处理对象之间的关系对于人类来说,其实是比较困难的。就算能够实现,也不容易维护和理解,这对于程序的维护性来说,并不是一个好事。而能够比较好的处理这种问题的数据结构,其实早已出现,那就是组合模式。不过据我所知,这种结构运算性能是比较差的,如果你追求性能的话,显然不能使用这种结构,那么我只能为你感到遗憾了。

我不详述这个模式怎么实现了,可以参考google或者度娘的结果。我想说的是,这种结构导致处理其中的问题都必须使用递归。而且往往在构建是就需要递归,因此其性能之差,令人发指。因此你如果对性能有严格的要求,我想说,换别的编程语言处理吧。JAVA实在是不太擅长这种结构的处理。你也许可以考虑Clojure。。。

递归会导致栈的问题,因为递归会大量的使用栈内存,如果你递归很深,有可能会导致栈溢出。所以JAVA语言在这样数据处理的任务上可能并不擅长,当然我们也能够采用一些别的手段处理这个问题,比如说并发啥的,不过都比较的复杂。

但是,问题总是能够解决的,这一点我坚信不疑。 


© 著作权归作者所有

共有 人打赏支持
上一篇: 对业务建模
下一篇: 编程
崔钢
粉丝 171
博文 99
码字总数 59953
作品 0
西安
高级程序员
私信 提问
设计模式之禅之设计模式-组合模式

一:组合模式的定义 --->组合模式(Composite Pattern)也叫合成模式,有时又叫做部分-整体模式(Part-Whole),主要是用来描述部分与整体的关系 --->将对象组合成树形结构以表示“部分-整体”的层...

无信不立
2016/01/22
0
0
一天一种设计模式之八-----组合模式

一.组合模式简介 组合模式属于结构型模式 将组合模式合成树形结构以表示“部分-整体” 的层次结构。“Composite”使得用户对单个对象和组合对象的使用具有一致性。 适用性: 你想表示对象的部...

tongqu
2016/03/15
80
0
【设计模式】组合模式 Composite Pattern

树形结构是软件行业很常见的一种结构,几乎随处可见, 比如: HTML 页面中的DOM,产品的分类,通常一些应用或网站的菜单,Windows Form 中的控件继承关系,Android中的View继承关系,部门的组...

风之源
2018/08/20
0
0
【白话设计模式十七】组合模式(Composite)

白话设计模式 工厂模式 单例模式 【白话设计模式一】简单工厂模式(Simple Factory) 【白话设计模式二】外观模式(Facade) 【白话设计模式三】适配器模式(Adapter) 【白话设计模式四】单例模式...

陶邦仁
2016/04/06
218
0
漫谈设计模式之组合模式

一、什么是设计模式、为什么要使用它 对设计模式的解释有很多,在这里我按个人的理解阐述一下。设计模式就是一些常见问题的优秀实践,一套按面向接口严格实现的优秀方法,是经过实践认证的、...

mrc_elite
2017/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解决各浏览器向url中传中问参数的问题

https://www.cnblogs.com/godtrue/p/4333262.html 后台的处理代码 public static String getUrlnewName( String oldName) {String newName = "";try {String agent = inv.get......

踏破铁鞋无觅处
21分钟前
1
0
微信支付携带证书请求

package utils.wechat; import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.KeyStore; import javax.net.ssl.SSLContext;......

猿神出窍
28分钟前
2
0
1093 - You can't specify target table 'xxx' for update in FROM clause, Time: 0.002000s

1093 - You can't specify target table 'xxx' for update in FROM clause, Time: 0.002000s 根据结果集在b_order_copy1 表中删除 DELETE FROM b_order_copy1 WHERE Id in ( SELECT Id FRO......

lwenhao
29分钟前
1
0
JavaScriptCore全面解析

本文由云+社区发表 作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者 JavaScript越来越多地出现在我们客户端开发的视野中,从ReactNative到JSpatch,JavaScript与客户端相...

腾讯云加社区
33分钟前
1
0
Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
44分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部