Singleton 单例设计模式
目录
[TOC]
概述
单例模式就是保证对象的唯一性,在项目启动之后,只初始化一次,通常用于读取配置文件在Configuration类似的类中。
单例模式分两种,饿汉式,懒汉式。
饿汉式:项目启动就已经初始化好,等待调用。
懒汉式:只有当单例对象第一次被调用时才初始化。
饿汉式Demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
package cn.com.jomin.designpattern.singleton; /** * Created * Date: 14:33 2021-06-15 <br/> * Description: 单例设计模式:饿汉式 * 1,私有化构造方法 * 2,在成员变量中初始化状态为 private static final 的单例对象 * 3,提供静态获取单例对象的方法 * @author jomin@loserzhao.com * @see */ public class HungrySingletonPatternDemo { private static final HungrySingletonPatternDemo instance = new HungrySingletonPatternDemo(); private HungrySingletonPatternDemo(){ } public static HungrySingletonPatternDemo getInstance(){ return instance; } public void sayHello(){ System.out.println("hello"); } } |
懒汉式,双检锁,线程非绝对安全的Demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
package cn.com.jomin.designpattern.singleton; /** * Created * Date: 14:33 2021-06-15 <br/> * Description: 单例模式:饱汉式,线程不安全 * 1,私有化构造方法 * 2,在成员变量中定义单例对象,不初始化 * 3,提供静态获取单例对象的方法并完成初始化 * @author jomin@loserzhao.com * @see */ public class FullSingletonPatternDemo { private static FullSingletonPatternDemo instance; private FullSingletonPatternDemo(){ } public static FullSingletonPatternDemo getInstance(){ if(null == instance){ synchronized(FullSingletonPatternDemo.class){ if(null == instance){ instance = new FullSingletonPatternDemo(); } } } return instance; } public void sayHello(){ System.out.println("hello"); } } |
懒汉式,线程非绝对安全,基于内部类实现的Demo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
package cn.com.jomin.designpattern.singleton; /** * Created * Date: 14:33 2021-06-15 <br/> * Description: 单例模式:饱汉式,线程安全 * 1,私有化构造方法 * 2,创建一个内部类,并在内部内中对单例对象进行初始化 * 3,在单例类中获取实例 * * 原理: * 1,内部类,只要没有被使用,就不会初始化,Singleton的实例就不会创建. * 2,只有在第一次调用 getInstance 方法时,内部类才会被初始化,创建Singleton * 3,Java底层能确保,类静态初始化的过程一定会执行一次,且仅有一次. * @author jomin@loserzhao.com * @see */ public class SafeFullSingletonPatternDemo { private SafeFullSingletonPatternDemo(){ } public static class InnerHolder{ public static final SafeFullSingletonPatternDemo instance = new SafeFullSingletonPatternDemo(); } public static SafeFullSingletonPatternDemo getInstance(){ return InnerHolder.instance; } } |
懒汉式,线程绝对安全,枚举实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
public class SafeEnumSingletonPatternDemo { private SafeEnumSingletonPatternDemo(){ } static enum SingletonEnum{ // 创建一个枚举对象,该对象天生为单例 INSTANCE; private SafeEnumSingletonPatternDemo singletonPatternDemo; // 私有化枚举的构造函数 private SingletonEnum(){ singletonPatternDemo = new SafeEnumSingletonPatternDemo(); } public SafeEnumSingletonPatternDemo getInstance(){ return singletonPatternDemo; } } /** * Author: jomin@loserzhao.com <br/> * Date: 14:33 2021-06-15 <br/> * Description: 对外暴露获取对象的静态方法 * @return */ public static SafeEnumSingletonPatternDemo getInstance(){ return SingletonEnum.INSTANCE.getInstance(); } } |
原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]
本文链接地址: http://www.loserzhao.com/java/designpattern/singleton-designpattern.html
文章的脚注信息由WordPress的wp-posturl插件自动生成
0 条评论。