社区
Java EE
帖子详情
疑惑:关于单例模式和静态块、静态方法
sling2007
2011-04-17 05:03:46
单例模式保证在JVM中最多存在某个类的一个实例,
那么这可以让一些资源文件只被一个实例使用,
这种效果用静态块和静态方法也可以做到啊。
而且用静态方法不会把类实例化,实例化的过程还让JVM多一些开销.....
那为什么用单例模式呢??????
...全文
136
5
打赏
收藏
疑惑:关于单例模式和静态块、静态方法
单例模式保证在JVM中最多存在某个类的一个实例, 那么这可以让一些资源文件只被一个实例使用, 这种效果用静态块和静态方法也可以做到啊。 而且用静态方法不会把类实例化,实例化的过程还让JVM多一些开销..... 那为什么用单例模式呢??????
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sling2007
2011-04-18
打赏
举报
回复
火龙果在好几个帖子中都提到了new的性能,看来JVM改进的很快啊
火龙果被占用了
2011-04-17
打赏
举报
回复
[Quote=引用 1 楼 sling2007 的回复:]
观点三:(Good!)
由于DAO的初始化,会比较占系统资源的,如果用静态方法来取,会不断地初始化和释放,所以我个人认为如果不存在比较复杂的事务管理,用singleton会比较好。
[/Quote]
这个观点我并不同意!
不要认为 new 一个对象是件很消耗资源的事情,事实上并不是这样。一个 new 仅仅需要十余个 CPU 指令就能够完成。而以目前 JVM 的性能,在内存分配上比 malloc 函数还要快。
火龙果被占用了
2011-04-17
打赏
举报
回复
建议使用单例模式,结合工厂方法,那扩展性会更好
静态方法由于无法被子类重写,因此基本上没有办法进行扩展
sling2007
2011-04-17
打赏
举报
回复
这是Google出的一些解释,还是不太明白........
观点一:(单例)
单例模式比静态方法有很多优势:
首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
其次,单例可以被延迟初始化,静态类一般在第一次加载是初始化;
再次,单例类可以被集成,他的方法可以被覆写;
最后,或许最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,或者可能需要允许用户从外部从外部文件中加载一个配置对象,或者编写自己的。你的代码不需要关注全局的状态,因此你的代码会更加灵活。
观点二:(静态方法)
静态方法中产生的对象,会随着静态方法执行完毕而释放掉,而且执行类中的静态方法时,不会实例化静态方法所在的类。如果是用singleton, 产生的那一个唯一的实例,会一直在内存中,不会被GC清除的(原因是静态的属性变量不会被GC清除),除非整个JVM退出了。这个问题我之前也想几天,并且自己写代码来做了个实验。
观点三:(Good!)
由于DAO的初始化,会比较占系统资源的,如果用静态方法来取,会不断地初始化和释放,所以我个人认为如果不存在比较复杂的事务管理,用singleton会比较好。
【设计模式】Java设计模式 -
单例模式
单例模式
,是java设计模式中最简单的设计模式,是属于创建类型模式。
单例模式
就是只能有一个实例,即一个类有且仅有一个实例,并且自行实例化向整个系统提供。
码农课堂:趣说
单例模式
——选班长 [转]
1. 懒汉式单例 小夏开始实现一个班长类:首先,我们要在班长类中将构造方法私有化,这样是防止在其他地方被实例化,就出现多个班长对象了。然后我们在班长类中自己 new 一个班长对象出来。最后给外界提供一个方法,...
Java 设计模式(一)之
单例模式
理论代码相结合
Java 设计模式之
单例模式
一、前言概念:应用:实现
单例模式
的原则和过程:方式:二、
单例模式
2.1、饿汉式(
静态
常量)2.2、饿汉式(
静态
代码
块
)2.3、懒汉式(线程不安全)2.4、懒汉式(线程安全,同步方法)2.5、...
Java 设计模式-
单例模式
理论代码相结合
通过
单例模式
的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)--来自百度百科 应用:
单例模式
可以让我们只创建一个对象从而避免了频繁创建.
单例模式
由于排版可能会影响代码查看,请移步我的博客
单例模式
一、什么是
单例模式
1、单例:保证一个类仅有一个实例,并提供一个访问它的全局访问点。2、
单例模式
是一种常用的软件设计模式之一,其目的是保证整个应用中只存在...
Java EE
67,513
社区成员
225,879
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章