文档章节

组合模式

崔钢
 崔钢
发布于 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 Pattern

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

风之源
08/20
0
0
一天一种设计模式之八-----组合模式

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

tongqu
2016/03/15
80
0
【白话设计模式十七】组合模式(Composite)

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

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

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

mrc_elite
2017/05/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

并行执行器

工作中出现某些代码需要并行执行以提高程序运算速度的情况,所以写了一个小工具。 public class Main {public static void main(String[] args) {// 你可以通过注释下面的部分代码来探索...

wanxiangming
31分钟前
1
0
AI赋能一键自动检测:页面异常、控件异常、文本异常

摘要: 1.前言 闲鱼质量团队一直致力于交付高质量的app给用户,当前随着AI技术不断发展,TensorFlow大热,也给测试手段带来了更多种可能,本文接下来给大家介绍AI在闲鱼测试的一点实践:如何...

阿里云官方博客
39分钟前
3
0
Microsoft Remote Desktop For Mac

地址:https://rink.hockeyapp.net/apps/5e0c144289a51fca2d3bfa39ce7f2b06/ 解决国内App store不能下载的问题。

Cheuker
50分钟前
1
0
原地打印刷新(倒计时)

原地打印刷新(倒计时) 代码如下 from time import sleepfor i in reversed(range(1, 11)): print("\r倒计时:{}秒".format(i), end="") sleep(1)...

_Change_
今天
1
0
php,vue,vue-ssr 做出来的页面有什么区别?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由shirishiyue发表于云+社区专栏 目前我这边的web页面,都是采用php+smarty模板生成的,是一种比较早期的开发模式。好处是没...

腾讯云加社区
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部