江湖开发者 | Java粉
网站地图
首页> Java> java静态方法与单例模式
2016
02-29

java静态方法与单例模式


java静态方法与单例模式


CSDN 正在进行的一个关于《静态方法和单件模式具体区别在哪里》的讨论很不错,特整理一些观点如下:

问题:
单件模式的类在运行时只有一个实例,也就是说其他对象都使用这个实例进行操作,那为什么不把这个类的所有方法都设计为静态的呢,那样岂不是更简单。


Sunmast 的回复:
.NET可以使用静态方法作为Singleton模式的实现,但是如果这么设计那么这个class就失去了面向对象的所有特性,有时候我们还是需要让这个class继承其他class,或者让其他class继承,等等类似问题

acewang 的回复:

收藏过阎宏博士在Java版的一段讲解,贴出来分享
------------------------------------------------------------
如果所有的方法都是静态的,那就根本不需要任何实例。有人把这种类叫做工具类,这种做法叫做工具类模式。

工具类模式基本上不需要面向对象的概念。

当然,我不是说面向对象的技术就一定比面向过程的好很多,但是如果你是在使用Java这样的面向对象的语言,设计一个面向对象的系统,那么一个单纯 的想法就是尽量靠近面向对象的概念。我没有见过一个使用Java的人反其道而行之,努力使用面向过程的概念。如果你是面向过程概念的拥护者,不妨选择一个 像Fortran这样的结构化编程语言。

在大多数的情况下,工具类中的方法都描述一些实体,应该把这些方法移动到描述这些实体的类中去。如果没有这些类,那就不妨考虑创建它们。

我曾经见到过一个很大的工具类,都是对String的操作。经过辨认,发现这些操作实际上都是为了组合URL准备的,并不是一般性地针对任何的String。为什么不把它们放到一个CustomizedURL类中去呢?

当你这样做了之后,会发现你并不需要一个很大的工具类,或者根本就可以取消它。

单例模式并不是一个取代工具类模式的好候选人。单例模式的情况在多JVM的J2EE服务器环境中变得很复杂。单例对象一旦创建出来就不会被湮灭,浪费内存。



另:

如果一个方法和他所在类的实例对象无关,那么它就应该是静态的,反之他就应该是非静态的。

如果我们确实应该使用非静态的方法,但是在创建类时又确实只需要维护一份实例时,就需要用单例模式了。



原文链接:http://www.cnblogs.com/yinhaiming/articles/1540098.html


Java江湖     
全部评论:

表情验证码,看不清楚,换一张

随机文章

云标签

公众号

微信

分享:分享我们的知识;专注:专注个人技术的提升;