设计模式-单例模式(Java实现)

来源:互联网 发布:sqlmap写入webshell 编辑:程序博客网 时间:2024/06/13 21:27

1. 摘要

单例模式可以保证系统中一个类只有一个实例,即一个类只有一个对象实例[1]。本文主要參考了《单利模式的七种写法》博客[2]。


2. 单例模式的分类

单例模式主要分为4种方式:

2.1 饿汉模式(由Early音译过来,具体含义为使用之前,已完成初始化)

2.2 懒汉模式(由Lazy音译过来,具体含义为使用之时,才进行初始化)

    2.2.1 非线程安全


    2.2.2 直接同步


    2.2.3 双重校验锁

2.3  静态内部类模式(利用了classloader的机制来保证初始化instance时,只有一个线程)

2.4 枚举模式(《Effective Java》作者Josh Bloch提倡的方式,不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象)

3. 单例模式的Java实现


3.1 饿汉模式

public class Singleton {    private static Singleton instance = new Singleton();    private Singleton(){    }    public static Singleton getInstance() {        return instance;    }}

3.2 懒汉模式(非线程安全)

public class Singleton {    private static Singleton instance;    private Singleton(){    }    public static Singleton getInstance() {        if (instance==null) {            instance = new Singleton();        }        return instance;    }}


3.3 懒汉模式(直接同步)

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


3.4 懒汉模式(双重校验锁)

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

3.5 静态内部类模式

public class Singleton {    private static class SingletonHolder {        private static final Singleton INSTANCE = new Singleton();    }    private Singleton(){    }    public static Singleton getInstance() {        return SingletonHolder.INSTANCE;    }}

3.6 枚举模式

public enum Singleton {    INSTANCE;}


4. 引用

[1] 单例模式_百度百科

[2] 单利模式的七种写法

原创粉丝点击