設計模式-單例模式

###單例模式 ####單例模式特色 保證一個類只有一個實例,而且提供一個訪問該實例的全局訪問點編程

  • windows中的任務管理器windows

  • 操做系統的文件系統,一個操做系統只能有一個文件系統安全

  • servlet編程中,每一個servlet也是單例併發

  • SpringMVC中,控制對象也是單例操作系統

  • Spring中的bean線程

####單例模式分類 #####餓漢式 特色:減小系統開銷code

public class SingletonDemo {
	    //類初始化的時候當即加載(沒有延時加載的優點),因爲加載類的時候天熱的線程安全
	    private static final SingletonDemo singleDemo = new SingletonDemo();
	    //私有化構造器
	    private SingletonDemo() {
	    }
	    //方法沒有同步,調用效率高
	    public static SingletonDemo getInstance(){
	        return singleDemo;
	    }
	}

#####懶漢式 ######懶漢式普通實現 特色:真正用的時候加載,資源的利用率高,可是每次調用的時候須要同步,併發下效率低對象

public class SingletonDemo1 {
	    //調用的時候加載
	    private static SingletonDemo1 instance = null;
	    //私有化構造器
	    private SingletonDemo1() {
	    }
	    //方法同步,調用效率低
	    public static synchronized SingletonDemo1 getInstance() {
	        if (instance == null) {
	            instance = new SingletonDemo1();
	        }
	        return instance;
	    }
	}

######餓漢式靜態內部類實現 特色:內存

  • 外部沒有static屬性不會餓漢式那樣當即加載對象資源

  • 真正調用getInstance()時,纔會加載靜態內部類.類加載時是線程安全的,static final保證內存中實例惟一

  • 兼具併發高效和延時加載的優點

public class SingletonDemo2 {
	    private static class singletonClass {
	        private static final SingletonDemo2 instance = new SingletonDemo2();
	    }
	    public static SingletonDemo2 getInstance() {
	        return singletonClass.instance;
	    }
	    private SingletonDemo2() {

	    }
	}
相關文章
相關標籤/搜索