模式的秘密--單例模式
阿新 • • 發佈:2018-02-28
string 私有 運行時 區別 span 直接 print tro 調用
1,單例模式分:餓漢模式和懶漢模式。
餓漢模式:在加載類的時候就自動創建
懶漢模式:在加載類的時候只聲明,只有在調用的時候才創建。
單利模式Singleton
- 應用場合:有些對象只需要一個就夠了,如:皇帝,老婆
- 作用:保證某個應用程序中某個實例有且只有一個
- 類型:餓漢模式,懶漢模式
- 區別:餓漢模式的特點是加載類時候比較慢,但是運行時候獲取對象的速度比較快。線程安全
- 懶漢模式的特定加載類的時候比較快,但運行時候獲取對象比較慢。線程不安全。
單例模式:最重要的是通過構造方法私有化,限制外部初始化實例,在內部創建,通過static關鍵字,使得外部可以通過類名調用方法,獲取類唯一實例。
餓漢模式實例:
package com.Singleton; /*單利模式Singleton * 應用場合:有些對象只需要一個就夠了,如:皇帝,老婆 * 作用:保證某個應用程序中某個實例有且只有一個 * 類型:餓漢模式,懶漢模式 * 區別:餓漢模式的特點是加載類時候比較慢,但是運行時候獲取對象的速度比較快。線程安全 * 懶漢模式的特定加載類的時候比較快,但運行時候獲取對象比較慢。線程不安全。 * */ /*餓漢模式:類加載後,這個類實例就會因為static關鍵字創建 * */ public class Singleton { //1,將構造方法私有化,不允許外部直接創建對象 privateSingleton() { } //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"); } } }
模式的秘密--單例模式