2018-07-27
设计模式——单例模式
定义:单例模式的类只允许存在一个该类的实例
实现思路
1将该类的构造方法私有化,避免其他类调用其构造方法
2提供一个静态方法getInstance(),当调用getInstance时,判断该类实例是否存在。该类实例存在空则返回该实例,若不存在则创建一个实例并返回。
注意事项:多线程情况
饿汉式代码:
public class Singleton{
private Singleton(){};
private final static Singleton SINGLETON = new Singleton();
//类装载时就完成了实例创建,避免了多线程的问题,但是也一直占用着内存。
public static Singleton getInstance(){
return SINGLETON;
}
}
懒汉式代码
public Singleton {
private static Singleton(){}
private Singleton singleton ;
public static getInstance(){
if(singleton==null){ singleton= new Singleton();} // 多线程下不能够保证只产生一个实例
return singleton;}
}
双重检查法代码
public Singleton {
private Singleton (){}
private static volitel Singleton singleton =null;
public static Singleton getIstance(){
if(singleton==null){
synchronized(Singleton.class){
if(singleton==null) singleton=new Singleton();
}}return singleton;
}} // 只有singleton==null的情况才启用同步方法。提高了效率。