Collection框架设计的失误:Stack!
2004-09-18 20:41
295 查看
Stack是Java中Collection设计的重大失误,这个类绝对是垃圾,设计Stack这个类的人
当时一定是脑子发热了。众所周知,Stack实现的数据结构中的栈的功能,也就是后进先出,
看看Stack的声明吧:
public class Stack extends Vector
Vector就已经不是什么好东西了,这里还继承它?这里列出Stack中的方法,不考虑它的实现,
因为如果你要用这个东西,那我也无法可说。
public Object push(Object item)
public synchronized Object pop()
public synchronized Object peek()
public synchronized int search(Object o)
public boolean empty()
你可能会觉得这些方法没什么,可是当它继承了Vector,就意味着它没有价值了,不过这个类的
实现确实比较简单,有兴趣可以看看源码。我们知道Vector是实现了List接口的,Stack继承
Vector自然也实现了List接口。而事实上Stack不是List,甚至连Collection都不是。设计者是不是
为了节省代码呀才这样设计的呀,但是我们设计应该使接口最小化。如果这样也可以的话,
干脆Collection框架就用一个类实现好了!
Stack就应该只有上面几个方法,不应该有其他方法,而现有的设计可以把Stack当作Vector来用。
List stack = new Stack();
你看到这样的代码不会觉得很别扭吗?我强烈建议不要使用Stack!
当时一定是脑子发热了。众所周知,Stack实现的数据结构中的栈的功能,也就是后进先出,
看看Stack的声明吧:
public class Stack extends Vector
Vector就已经不是什么好东西了,这里还继承它?这里列出Stack中的方法,不考虑它的实现,
因为如果你要用这个东西,那我也无法可说。
public Object push(Object item)
public synchronized Object pop()
public synchronized Object peek()
public synchronized int search(Object o)
public boolean empty()
你可能会觉得这些方法没什么,可是当它继承了Vector,就意味着它没有价值了,不过这个类的
实现确实比较简单,有兴趣可以看看源码。我们知道Vector是实现了List接口的,Stack继承
Vector自然也实现了List接口。而事实上Stack不是List,甚至连Collection都不是。设计者是不是
为了节省代码呀才这样设计的呀,但是我们设计应该使接口最小化。如果这样也可以的话,
干脆Collection框架就用一个类实现好了!
Stack就应该只有上面几个方法,不应该有其他方法,而现有的设计可以把Stack当作Vector来用。
List stack = new Stack();
你看到这样的代码不会觉得很别扭吗?我强烈建议不要使用Stack!
相关文章推荐
- 基于.Net 2.0 (C# 2.0, ASP.NET 2.0)的快速开发框架设计NBear V3.3.9 Stable [开源]
- Java日志系统框架的设计与实现
- Spring 框架的设计理念与设计模式分析
- activiti框架 数据库设计说明
- HTTP(S)网络框架的设计
- 基于cocos2d-x引擎的游戏框架设计
- 【学习日记】集合框架知识点总结(1)--Collection
- Collection集合 框架图 及 Collections帮助类
- js框架设计1.3数组化
- 实战3--设计管理模块 第二步, 分析功能和请求, 搭建简单框架
- 架构、框架、设计模式之间的关系
- Laravel5框架中模型、控制器、视图设计代码
- GEF框架中的设计模型(命令模式)
- .NET应用框架架构设计实践 - 为应用程序框架提供多样化的配置方式
- ios的collection控件的自定义布局实现与设计
- 播思CTO饶宏:图形用户界面框架与设计
- Android应用框架设计
- [自制操作系统] BMP格式文件读取&图形界面系统框架-应用接口设计
- [转]Android 程序框架设计
- laravel框架之MVC设计