首页 > 其他 > 详细

单例模式

时间:2021-06-16 14:38:47      阅读:13      评论:0      收藏:0      [点我收藏+]
 1 public class Single01 {
 2     /**
 3      * 饿汉式  直接创建实例对象,不管是否需要这个对象
 4      *
 5      *
 6      * 1.构造器私有化
 7      * 2.自行创建,并且用静态变量保存
 8      * 3.向外提供这个实例
 9      * 4、强调这是一个单例,我们可以用final修饰
10      */
11     public static final Single01 instance = new Single01();
12     private Single01() {
13     }
14 }
15 
16 public enum Single02 {
17     /**
18      * 枚举类型,表示该类型的对象是有限的几个
19      * 我们可以限定为一个,就成了单例
20      *
21      */
22     INSTANCE
23 }
24 
25 
26 public class Single03 {
27     /**
28      * 静态代码块 饿汉式
29      * 通常用来传递参数 复杂方式的应用
30      */
31     public static final Single03 INSTANCE;
32 //    private String info;
33     static {
34         INSTANCE = new Single03(info);
35     }
36     private Single03(String info){
37     }
38 }

上述代码是饿汉式的实现方式:直接创建对象,不存在线程安全问题。

 

 

 1 //初始懒汉模式,存在线程安全问题
 2 public class Single04 {
 3     /**
 4      * 懒汉式  延迟创建实例对象
 5      *
 6      * 1、构造器私有化
 7      * 2.用一个静态变量保存这个唯一的实例
 8      * 3、提供一个静态方法,获取这个实例对象
 9      */
10     private static  Single04 instance;
11     private Single04(){
12     }
13     public static Single04 getInstance(){
14         if(instance == null) {
15             instance = new Single04();
16         }
17         return instance;
18     }
19 }
20 
21 
22 public class Single05 {
23     /**
24      * 双检锁方式实现线程安全  效率最优
25      * 懒汉式  延迟创建实例对象
26      *
27      * 1、构造器私有化
28      * 2.用一个静态变量保存这个唯一的实例
29      * 3、提供一个静态方法,获取这个实例对象
30      */
31     private static Single05 instance;
32     private Single05(){
33     }
34     public static Single05 getInstance() {
35         if (instance == null) {
36             synchronized (Single05.class) {
37                 if (instance == null) {
38                     instance = new Single05();
39                 }
40             }
41         }
42         return instance;
43     }
44 }
45 
46 
47 
48 /**
49  * 在内部类被加载和初始化时,才创建instance对象
50  *      静态内部类不会自动随着外部类的加载和初始化而初始化,它是单独加载和初始化的。
51  *          在使用方法的时候才会初始化创建实例对象
52  *  因为是在内部类加载和初始化时,创建的,因此线程是安全的
53  */
54 public class Single06 {
55     private Single06(){
56     }
57     private static class Inner{ //静态内部类
58         private static final Single06 INSTANCE = new Single06();
59     }
60     public static Single06 getInstance(){
61         return Inner.INSTANCE;
62     }
63 }

上述是懒汉式创建实例对象,使用静态内部类最简单

 

 

单例模式

原文:https://www.cnblogs.com/zsh-blog/p/14888778.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!