设计模式---单例模式

Posted vixviy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式---单例模式相关的知识,希望对你有一定的参考价值。

单例模式

解决问题:确保一个类最多只有一个实例,并提供一个全局访问点

实现步骤:
1.构造方法私有化,(仅本类才可以调用)
2.声明一个本类对象
3.给外部提供一个静态方法获取对象实例(静态方法通过类即可调用)

两种实现方式:1.懒汉式 2.饿汉式

// 懒汉式(懒加载,延迟加载)
// 第一次调用getInst()方法时,对象被创建,程序结束后释放
public class Singleton {
    private Singleton() {
    }

    private static Singleton inst = null;

    public static Singleton getInst() {
        if (null == inst) {
            inst = new Singleton();
        }
        return inst;
    }
}
// 饿汉式
//类被加载后,对象被创建,程序结束后释放
public class Singleton {
    private Singleton() {
    }

    private static Singleton inst = new Singleton();

    public static Singleton getInst() {
        return inst;
    }
}

懒汉式 优化 解决安全问题

// 懒汉式(懒加载,延迟加载)
// 双重锁定检查 实现线程安全
public class Singleton {
    // 拒绝通过反射调用
    private Singleton() {
        if(null !=inst){
            throw new RuntimeException("此类为单例模式");
        }
    }

  //volatile关键字保证变量的唯一性
    private volatile static Singleton inst = null;

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

以上是关于设计模式---单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块

设计模式之单例模式

设计模式之单例模式