`
凤凤陈
  • 浏览: 19426 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

什么是单例模式

阅读更多
今天笔试的时候碰到这到题,当时自己迷茫,单例模式,完全没有听说过。

        按照自己的想法答了一下,结果是写的不知所云。。

那究竟什么是单例模式呢?它有什么特点?如何实现它?

单例模式的要点有三个;

一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。

单例模式有以下的特点:

1 单例类只可有一个实例。

2 单例类必须自己创建自己这惟一的实例。

3 单例类必须给所有其他对象提供这一实例。

一般Singleton模式通常有几种形式:

public class Singleton {

private Singleton(){}

//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用

private static Singleton instance = new Singleton();

//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}



第二种形式:
public class Singleton {

private static Singleton instance = null;

public static synchronized Singleton getInstance() {

if (instance==null)
instance=new Singleton();
return instance; }

}



使用Singleton.getInstance()可以访问单态类。

上面第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。

注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。关于lazy initialization的Singleton有很多涉及double-checked locking (DCL)的讨论,有兴趣者进一步研究。

一般认为第一种形式要更加安全些。
分享到:
评论
Global site tag (gtag.js) - Google Analytics