文档章节

组合模式

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

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

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

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

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

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


© 著作权归作者所有

共有 人打赏支持
崔钢
粉丝 172
博文 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
设计模式----组合模式

组合模式: 允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 使用组合结构,我们能把相同的操作应用到组合和个别对象上。换句...

Superheros
2017/11/11
7
0
【白话设计模式十七】组合模式(Composite)

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

陶邦仁
2016/04/06
218
0

没有更多内容

加载失败,请刷新页面

加载更多

怎样使用主流缓存更新策略来减少性能消耗?

在互联网项目开发中,缓存的应用是非常普遍了,缓存可以帮助页面提高加载速度,减少服务器或数据源的负载。 一、为什么需要缓存? 一般在项目中,最消耗性能的地方就是后端服务的数据库了。而...

Java干货分享
26分钟前
1
0
杭州云栖大会阿里云放大招,8K远程医疗会诊引关注

大家每天都会照镜子,镜子里的一切都清清楚楚,足可乱真,可是你想过有一天看视频直播就像照镜子么? 这不,在云栖大会的C馆里,8K超高清直播体验馆前异常火爆,在这里,很多参会者都围着有1...

阿里云云栖社区
28分钟前
16
0
C++获取系统盘符极简方法

盘符获取 std::shared_ptr<std::list<wchar_t>> disks(void) {wchar_t data[255];return [&](int length)->std::shared_ptr<std::list<wchar_t>> {auto result = std::make_shared< s......

CHONGCHEN
28分钟前
1
0
Python 操作samba文件服务器

# /usr/bin/env python# -*- coding:utf-8 -*-from smb.SMBConnection import SMBConnectionconn = SMBConnection('root', '123456', 'any', '', use_ntlm_v2 = True)assert conn.......

China丶小可
35分钟前
1
0
vue引入echart.js打包时特别大

link : https://www.cnblogs.com/strinkbug/p/5786222.html 一、i在html中添加script标签如下: <script src="//cdn.bootcss.com/echarts/3.2.2/echarts.simple.min.js"></script> 二、在web......

Js_Mei
38分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部