论坛首页 Java企业应用论坛

学习单例模式

浏览 16520 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (6) :: 隐藏帖 (9)
作者 正文
   发表时间:2008-11-26   最后修改:2008-12-05

看了下单例模式,个人理解就是只能有一此实例化,这样对性能有一定提高。

下面说说学习小例子:

public class Singleton {
		private Singleton(){}
		private static Singleton instance = new Singleton();
		public static Singleton getInstance(){
			return instance;
		}
		public void sys(String s){
			System.out.println(s+"singleton.........");
		}
}

 

此类就是一个单例类,里面我写了一个方法

测试此类:

public class TestSingletion {

	public static void main(String args[]){

		Singleton.getInstance().sys("fdsfds");
	}
}

 

只能通过Singleton.getInstance()得到实例,调用类中方法。

这就是一个单例模式。

 

网上还有一种方法是:

public class Singleton { 
 private static Singleton instance = null;
 private Singleton(){
  //应该加上这个
 }
 public static synchronized Singleton getInstance(){
  if(instance==null){
    instance = new Singleton();
  }
  return instance;
 }
 public void sys(String s){
  System.out.println(s+"singleton.........");
 }
}

 网上说可以这样可以防止多个实例。

而我用测试类进行测试时,却可以实例化此类,不知道为何,谢谢能有人讨论下。

 

在各位的帮助下,我知道错了,谢谢

 

   发表时间:2008-12-01  
可能是构造器没有私有化。
0 请登录后投票
   发表时间:2008-12-01  
哎,管理员在哪里啊~~~
发现只要不是纯技术问题,均可以在论坛(非入门版)里混~
0 请登录后投票
   发表时间:2008-12-01  
晕,你第二个写的 构造器都没私有化 叫什么单例子啊
0 请登录后投票
   发表时间:2008-12-02  
chenpingtai2008 写道
晕,你第二个写的 构造器都没私有化 叫什么单例子啊

小弟刚来的,学习喽,楼上说的对!
0 请登录后投票
   发表时间:2008-12-02  
楼主,第二个例子给类加上私有构造函数就可以了
private Singleton(){}
第一个类加载时生成实例;第二个是第一次调用时生成实例,通过synchronized保证唯一。
0 请登录后投票
   发表时间:2008-12-02  
nevergiveup3 写道
可能是构造器没有私有化。


下面那个 不是可能 是确实没把构造函数private
0 请登录后投票
   发表时间:2008-12-02  
谢谢大家了
0 请登录后投票
   发表时间:2008-12-02  
synchronized  估计不好,虽说保证了没人调用时没有实例,但是调用者多了,还受同步限制,得不偿失、
0 请登录后投票
   发表时间:2008-12-02  
tou3921 写道
synchronized  估计不好,虽说保证了没人调用时没有实例,但是调用者多了,还受同步限制,得不偿失、


支持!!
这也是为什么有了下面这篇文章:
http://www.ibm.com/developerworks/java/library/j-dcl.html
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics