单例模式的6种写法

Posted 18sui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式的6种写法相关的知识,希望对你有一定的参考价值。

简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为
构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例。
getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解
成多个对象。单例模式实现起来也很容易,直接看demo吧.


1. 懒汉写法(线程不安全)
public class Singleton 
private static Singleton singleton;
private Singleton() 

public static Singleton getInstance() 
if (singleton == null) 
singleton = new Singleton();

return singleton;




2. 懒汉式写法(线程安全)
public class Singleton 
private static Singleton instance;
private Singleton ()
public static synchronized Singleton getInstance() 
if (instance == null) 
instance = new Singleton();

return instance;




3. 饿汉式写法
public class Singleton 
private static Singleton instance = new Singleton();
private Singleton ()
public static Singleton getInstance() 
return instance;




4. 静态内部类
public class Singleton 
private static class SingletonHolder 
private static final Singleton INSTANCE = new Singleton();

private Singleton ()
public static final Singleton getInstance() 
return SingletonHolder.INSTANCE;




5. 枚举(这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问
题,而且还能防止反序列化重新创建新的对象)
public enum Singleton 
INSTANCE;
public void whateverMethod() 




6. 双重校验锁
public class Singleton 
private volatile static Singleton singleton;
private Singleton ()
public static Singleton getSingleton() 
if (singleton == null) 
synchronized (Singleton.class) 
if (singleton == null) 
singleton = new Singleton();



return singleton;



以上是关于单例模式的6种写法的主要内容,如果未能解决你的问题,请参考以下文章

java 单例模式5种写法

单例模式的几种写法

C# 单例模式的五种写法

模式--单例模式8种写法

谁要是再问你单例模式,那就抛给他这7种写法吧!

单例模式的五种写法