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 条评论。