一起学系列之单例模式:只推荐三种~

Posted 是Kerwin啊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一起学系列之单例模式:只推荐三种~相关的知识,希望对你有一定的参考价值。






意图

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

别名:单件模式

单例模式的诞生

开发】:老大,为什么我保存配置信息,每次都和我预期的不一样啊,总是会覆盖?

BOSS】:哈?我来看看。

BOSS】:你每次使用的时候都会new一个新的配置对象吗?

开发】:对啊,有什么问题?

BOSS】:那肯定不对啊,像这种配置信息,全局只应该有一个,不然会互相影响!

HeadFirst 核心代码

饿汉型 (不推荐)

public class HazardousTypeSingleton {

    private static final App APP = new App();

    // 私有构造方法
    private HazardousTypeSingleton () {}

    // 类加载时已初始化,不会有多线程的问题
    static App getInstance() {
        System.out.println("APP - 饿汉型模式");
        return APP;
    }
}

名字由来:因为随着类加载而加载,显得很“急迫”,所以称之为饿汉型

**评价:**这样的写法和全局变量没有本质的区别,不推荐

懒汉型 (不推荐)

public class LazyTypeSingleton {

    private LazyTypeSingleton () {}

    // 静态私用成员,没有初始化
    private static App intance = null;

    /***
     * 直接加synchronized关键字
     */

    synchronized  static App getIntance () {
        System.out.println("APP - 懒汉型模式");
        if (null == intance) {
            return new App();
        }
        return intance;
    }
}

名字由来:调用时才加载,因此称之为懒汉型

**评价:**这样写有延迟加载的功能,但是加了一个synchronized大锁,因此多线程环境下效率较低

懒汉型之双重锁校验

以上是关于一起学系列之单例模式:只推荐三种~的主要内容,如果未能解决你的问题,请参考以下文章

23种设计模式系列之单例模式

JAVA设计模式之单例模式(转)

设计模式之单例模式

设计模式之单例模式

设计模式之单例模式(三种实现方式)

单例模式