首页 > 技术文章 > java单例设计模式

xjx199403 2019-04-24 18:43 原文

单例模式的概念

单例类只有一个实例,并且只由自己创建,实例化后向整个系统提供自己的实例。

单例设计模式主要分为2种:懒汉式和饿汉式。2者的区别在于初始化的时间不同。

像线程池,缓存,日志等都被设计成单例模式;spring中所有的bean不设置作用域的话,默认都是单例模式。

这些单例类大多都是具有管理资源的用途。

 

饿汉式单例模式的实现

饿汉式单例模式在定义类的时候被实例化。

public class Singleton1 {

    private Singleton1() {}

    private static final Singleton1 single = new Singleton1();

    //静态工厂方法

    public static Singleton1 getInstance() {

        return single;

    }

}

1.构造方法私有化,防止被外部实例化(虽然通过反射还是可以创建);

2.内部声明私有变量并实例化;

3.为外部提供访问该实例的静态方法。

 

 

懒汉式单例模式的实现

懒汉式单例模式在调用方法的时候才实例化。

public class Singleton {
    private Singleton() {}
    private static Singleton single=null;
    //静态工厂方法 这里加上同步锁,让这个方法不会同时被多个线程访问
    public static Singleton getInstance() {
         if (single == null) {  
             single = new Singleton();
         }  
        return single;
    }
}

懒汉式的实现与之前的基本相同,只是实例化放在了方法内。

好处是消耗系统资源少。

坏处是它并不是同步的,如果在多线程下,可能被创建多个实例。因此在上面可以为方法加锁,保证同步。

 

推荐阅读