Singleton可以說是《Design Pattern》中最簡單也最實用的一個設計模式。那么,什么是Singleton?
顧名思義,Singleton就是確保一個類只有唯一的一個實例。Singleton主要用于對象的創建,這意味著,如果某個類采用了Singleton模式,則在這個類被創建后,它將有且僅有一個實例可供訪問。很多時候我們都會需要Singleton模式,最常見的比如我們希望整個應用程序中只有一個連接數據庫的Connection實例;又比如要求一個應用程序中只存在某個用戶數據結構的唯一實例。我們都可以通過應用Singleton模式達到目的。
一眼看去,Singleton似乎有些像全局對象。但是實際上,并不能用全局對象代替Singleton模式,這是因為:其一,大量使用全局對象會使得程序質量降低,而且有些編程語言例如C#,根本就不支持全局變量。其二,全局對象的方法并不能阻止人們將一個類實例化多次:除了類的全局實例外,開發人員仍然可以通過類的構造函數創建類的多個局部實例。而Singleton模式則通過從根本上控制類的創建,將"保證只有一個實例"這個任務交給了類本身,開發人員不可能再有其它途徑得到類的多個實例。這一點是全局對象方法與Singleton模式的根本區別。
顧名思義,Singleton就是確保一個類只有唯一的一個實例。Singleton主要用于對象的創建,這意味著,如果某個類采用了Singleton模式,則在這個類被創建后,它將有且僅有一個實例可供訪問。很多時候我們都會需要Singleton模式,最常見的比如我們希望整個應用程序中只有一個連接數據庫的Connection實例;又比如要求一個應用程序中只存在某個用戶數據結構的唯一實例。我們都可以通過應用Singleton模式達到目的。
一眼看去,Singleton似乎有些像全局對象。但是實際上,并不能用全局對象代替Singleton模式,這是因為:其一,大量使用全局對象會使得程序質量降低,而且有些編程語言例如C#,根本就不支持全局變量。其二,全局對象的方法并不能阻止人們將一個類實例化多次:除了類的全局實例外,開發人員仍然可以通過類的構造函數創建類的多個局部實例。而Singleton模式則通過從根本上控制類的創建,將"保證只有一個實例"這個任務交給了類本身,開發人員不可能再有其它途徑得到類的多個實例。這一點是全局對象方法與Singleton模式的根本區別。
首先保證類中有唯一的一個構造器,而且是private的,私有的,就是除了在該類中其他地方都不可以訪問的。 其次有一個私有的private該類型的變量,這個變量可以在聲明的的時候就實例化,也可以在構造器中調用的時候再實例化,但是,在構造器中實例化時要先判斷: private A a; public A(){ if(a == null) a= new A(); } 這樣就可以保證只有一個A的實例, 淡然最重要的是要有個public的返回A類型變量的方法,用來返回這個唯一的變量 public A returnA(){ return a; } 這樣就可以了,實際上就三方面: 1,一個私有的構造器 2,一個私有的該類類型的變量 3,必須有一個共有的返回類型為該類類型的方法,用來返回這個唯一的變量