美文网首页
Java 单例模式

Java 单例模式

作者: 潜意识_ | 来源:发表于2020-07-06 14:17 被阅读0次

单例设计模式(Singleton Pattern):是指确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。需要注意的是,在系统中只有真正有“单一实例”的需求时才可以使用。

单例使用的三个要点:

(1)某个类只能有一个实例;

(2)该类必须自行创建这个实例;

(3)该类必须自行向整个系统提供这个实例。

下面我会介绍几种常用的单例模式。

1、饿汉式

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

不管用到与否类装载时就完成了实例化,所以如果在程序中没有用到就会浪费内存,但是你不用它那你写它干嘛呢,哈哈哈哈。

2、懒汉式


public class Singleton {

    private static Singleton INSTANCE;

    private Singleton () {}

    public static Singleton getInstance() {

    if (INSTANCE == null) {

        INSTANCE = new Singleton();

    }

    return INSTANCE;

    }

}

线程不安全

3、双重同步锁(懒汉式)


public class Singleton {

// 1. 用volatile关键词是为了防止JVM中执行时指令重排序

private  static volatile Singleton INSTANCE;

    private Singleton() {}

    public static Singleton getInstance() {

    if (INSTANCE == null) {

        synchronized(Singleton.class) {

            if (INSTANCE == null) {

                INSTANCE = new Singleton();

            }

        } 

    }

    return INSTANCE;

    } 

}

4、Holder式(懒汉式)


public class Singleton {

    private Singleton() {}

    public statice Singleton getInstance() {

        return SingletonHolder.INSTANCE;

    }

    private class SingletonHolder {

        private static final Singleton INSTANCE = new Singleton();

    }

}

5、枚举单例


public class Singleton {

    INSTANCE;

    public static Singleton getInstance() {

        return INSTANCE;

    }

}

相关文章

网友评论

      本文标题:Java 单例模式

      本文链接:https://www.haomeiwen.com/subject/ybbwqktx.html