设计模式(一)——单例模式

/ 设计模式 / 0 条评论 / 2299浏览

简介

单例模式是很常用的一种设计模式,其定义是单例对象的类只能允许一个实例存在。它和多例模式有一个共通之处,就是构造函数私有化。单例模式一般有懒汉式和饿汉式两种,当然也有很多其他写法,这里只写两种。

饿汉式

public class Singleton {
    private static final Singleton INSTANCE = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return INSTANCE;
    }
}

这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。但是在类装载的时候就会实例化,如果一直没用就会一直浪费一部分内存空间。

懒汉式

public class Singleton {
    private static Singleton singleton;

    private Singleton(){}

    public static Singleton getInstance(){
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

懒汉式最大的特点是它是在第一次使用的时候才实例化对象。这里进行了两次if (singleton == null)检查,这样就可以保证线程安全,实例化代码只用执行一次,后面再次访问时,判断if (singleton == null),直接return实例化对象。

测试

public class SingletonTest{
    public static void main(String[] args) {
        Singleton singleton1 = Singleton.getInstance();
        Singleton singleton2 = Singleton.getInstance();
        Singleton singleton3 = Singleton.getInstance();

        System.out.println(singleton1);
        System.out.println(singleton2);
        System.out.println(singleton3);
    }
}

输出

language.Singleton@7291c18f
language.Singleton@7291c18f
language.Singleton@7291c18f

可以看出三个singleton的地址是一样的,说明只有这一个实例化对象。

应用场景

微信公众号浏览体验更佳,在这里还有更多优秀文章为你奉上,快来关注吧!

北风IT之路