单列模式

单列模式

    一、单列模式有:懒汉模式、饿汉模式、双重锁模式

        1、懒汉模式:在第一次请求的时候才创建实例,并且第一次创建后就不能再创建该实例

        2、饿汉模式:在类加载的时候就创建实例

        3、双重锁模式:双重锁模式其实就是懒汉模式的双重锁模式,也是三种模式中效率最高的模式

 二、创建单列模式的步骤:

        1、创建一个私有的静态变量

        2、创建一个私有的构造方法

        3、创建一个公有的静态方法,并返回实例

    三、代码示例

1、懒汉模式

 1 package com.singleton;
 2 /**
 3 * 单列模式,懒汉模式,在第一次请求的时候创建实例,并且第一次创建实例后就不能在创建该实例
 4 * @author Administrator
 5 *
 6 */
 7 public class Singleton1 {
 8     //创建一个私有的静态变量
 9     private static Singleton1 singleton1 = null;
10     //创建一个私有的构造方法
11     private Singleton1(){
12 
13     }
14     //创建一个共有的静态方法,并返回该实例
15     public static Singleton1 getSingleton(){
16         if(singleton1 == null){
17             singleton1 = new Singleton1();
18             System.out.println("创建一个Singleton实例");
19         }else{
20             System.out.println("已经创建Singletong实例了,不能再创建");
21         }
22         return singleton1;
23     }
24     //测试
25     public static void main(String[] args) {
26         //测试懒汉模式
27         Singleton1 s = Singleton1.getSingleton();
28         System.out.println("第一次--->" + s);
29         System.out.println("第二次--->" + Singleton1.getSingleton());
30         System.out.println("第三次--->" + Singleton1.getSingleton());
31     }
32 }

2、饿汉模式

 1 package com.singleton;
 2 /**
 3 * 单列模式,饿汉模式,类加载的时候就创建实例
 4 * @author Administrator
 5 *
 6 */
 7 public class Singleton2 {
 8     //创建私有的静态变量,并创建实例
 9     private static Singleton2 singleton2 =new Singleton2();
10     //创建私有的构造方法
11     private Singleton2(){
12         System.out.println("构造函数执行了");
13     }
14     //创建一个共有的静态方法,并返回实例
15     public static Singleton2 getSingleton2(){
16         return singleton2;
17     }
18 
19     //测试饿汉模式
20     public static void main(String[] args) {
21         Singleton2 s2 = Singleton2.getSingleton2();
22         System.out.println(s2);
23         System.out.println(Singleton2.getSingleton2());
24         System.out.println(Singleton2.getSingleton2());
25     }
26 }

2、双重锁模式

 1 package com.singleton;
 2 /**
 3 * 单列模式,双重锁模式
 4 * @author Administrator
 5 *
 6 */
 7 public class Singleton3 {
 8     //创建一个私有的静态变量
 9     private static Singleton3 singleton3 = null;
10     //创建一个私有的构造方法
11     private Singleton3(){
12         System.out.println("构造函数开始!");
13     }
14     //创建一个公有的静态方法,并返回实例
15     public static synchronized Singleton3 getSingleton3(){
16         if(singleton3 == null){
17             synchronized (Singleton3.class) {
18                 if(singleton3 == null){
19                     singleton3 = new Singleton3();
20                 }
21             }
22         }
23         return singleton3;
24     }
25 
26     //测试双重锁模式
27     public static void main(String[] args) {
28         Singleton3 s3 = Singleton3.getSingleton3();
29         System.out.println(s3);
30         System.out.println(Singleton3.getSingleton3());
31         System.out.println(Singleton3.getSingleton3());
32     }
33 }
原文地址:https://www.cnblogs.com/j120zjb/p/8442171.html