1. 程式人生 > >模式的秘密--單例模式

模式的秘密--單例模式

string 私有 運行時 區別 span 直接 print tro 調用

1,單例模式分:餓漢模式和懶漢模式。

餓漢模式:在加載類的時候就自動創建

懶漢模式:在加載類的時候只聲明,只有在調用的時候才創建。

單利模式Singleton

  • 應用場合:有些對象只需要一個就夠了,如:皇帝,老婆
  • 作用:保證某個應用程序中某個實例有且只有一個
  • 類型:餓漢模式,懶漢模式
  • 區別:餓漢模式的特點是加載類時候比較慢,但是運行時候獲取對象的速度比較快。線程安全
  • 懶漢模式的特定加載類的時候比較快,但運行時候獲取對象比較慢。線程不安全。

單例模式:最重要的是通過構造方法私有化,限制外部初始化實例,在內部創建,通過static關鍵字,使得外部可以通過類名調用方法,獲取類唯一實例。

餓漢模式實例:

package com.Singleton;

/*單利模式Singleton
 * 應用場合:有些對象只需要一個就夠了,如:皇帝,老婆
 * 作用:保證某個應用程序中某個實例有且只有一個
 * 類型:餓漢模式,懶漢模式
 * 區別:餓漢模式的特點是加載類時候比較慢,但是運行時候獲取對象的速度比較快。線程安全
 *         懶漢模式的特定加載類的時候比較快,但運行時候獲取對象比較慢。線程不安全。
 * */

/*餓漢模式:類加載後,這個類實例就會因為static關鍵字創建
 * */
public class Singleton {
    //1,將構造方法私有化,不允許外部直接創建對象
    private
Singleton() { } //2,創建唯一的應用實例,使用private static private static Singleton instance=new Singleton(); //3,提供一個用於獲取實例的方法,使用public static public static Singleton getInstance() { return instance; } }

懶漢模式實例:

package com.Singleton;

/*懶漢模式
 * 懶漢模式:並不會在加載類的時候創建實例,而是在方法調用,用到的時候才會創建。
 * 
*/ public class Singleton2 { //1,將構造方法私有化,不允許外部直接創建對象 private Singleton2() { } //2,聲明類唯一的應用實例,使用private static private static Singleton2 instance; //3,提供一個用於獲取實例的方法,使用public static public static Singleton2 getInstance() { if(instance==null) { instance=new Singleton2(); } return instance; } }

調用這兩個類測試:

package com.Singleton;

public class Test {
    
    public static void main(String[] args) {
        
        //餓漢模式
        Singleton s1=Singleton.getInstance();
        Singleton s2=Singleton.getInstance();
        if(s1==s2)
        {
            System.out.println("s1等於s2");
        }
        else
        {
            System.out.println("s1不等於s2");
        }
        
        //懶漢模式
        Singleton2 s3=Singleton2.getInstance();
        Singleton2 s4=Singleton2.getInstance();
        if(s3==s4)
        {
            System.out.println("s3等於s4");
        }
        else
        {
            System.out.println("s3不等於s4");
        }
    }

}

模式的秘密--單例模式