设计模式之–单例模式
单例模式的概念
单例模式 设计模式中最常用以及最常被面试问道的一种。作为开发人员,手写单例模式是最基本的能力
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
为什麽不需要实例化 ?
因为有实例化的无参构造设为私有,其实也是实现单例的一种手段,确保对象不会再别的地方被new 出来
首先来了解下今天要讲解的两种实现(还有多种实现) 懒汉式 饿汉式
懒汉式
package sun.framework.genesis.beta.designmode.one;
/**
* @Auther: SunDC
* @Date: 2019/11/1 15:25
* @Description: 单例模式 (懒汉式)最常见的两种之一
* 需要注意的是 这是线程不安全的
*/
public class IdlerOneClass {
//volatile 是一个类型修饰符。volatile 的作用是作为指令关键字,
//确保本条指令不会因编译器的优化而省略。
//详细解释 (先了解类的加载过程) -- https://www.jianshu.com/p/35e4504d42e4
private volatile static IdlerOneClass idlerOneClass = null;
// 私有化构造方法
private IdlerOneClass() {
}
public static IdlerOneClass getInstance() {
if (idlerOneClass == null) {
synchronized (IdlerOneClass.class) {
if (idlerOneClass == null) {
idlerOneClass = new IdlerOneClass();
}
}
}
return idlerOneClass;
}
}
恶汉式
package sun.framework.genesis.beta.designmode.one;
/**
* @Auther: SunDC
* @Date: 2019/11/1 15:32
* @Description: 单例模式 (饿汉式)最常见的两种之一
* 需要注意的是 这是最典型的 以空间换时间案例
*/
public class HungerOneClass {
private static HungerOneClass hungerOneClass = new HungerOneClass();
// 私有化构造方法
private HungerOneClass() {
}
public static HungerOneClass getHungerOneClass() {
return hungerOneClass;
}
}