单例模式(singleton)解析例子
生活随笔
收集整理的這篇文章主要介紹了
单例模式(singleton)解析例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
摘要:本文深入淺出的講述了設計模式中的單例模式,并給出了簡單的示例,例子淺顯易懂,并附帶源代碼。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ?????? 單例模式屬于對象創建型模式,其意圖是保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。對一些類來說,只有一個實例是很重要的,雖然系統中可以有許多打印機,但卻只應該有一個打印機假脫機,只應該有一個文件系統和一個窗口管理器,一個數字濾波器只能有一個A/D轉換器,一個會計系統只能專用于一個公司。怎樣才能保證一個類只有一個實例并且這個實例易于被訪問,一個全局變量使得一個對象可以被訪問,但它不能防止你實例化多個對象,一個更好的方法是讓類自身負責保存他的唯一實例。這個類可以保證沒有其他實例可以被創建,并且它可以提供一個訪問該實例的方法,這就是Singleton模式。 ?????? 實用性:在下面的情況下可以使用Singleton模式。 l???????? 當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。 l???????? 當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能使用一個擴展的實例時。 例如:一個產生隨機數的例子,整個應用程序中只需要一個類的實例來產生隨機數,客戶端程序從類中獲取這個實例,調用這個實例的方法nextInt(),公用的方法訪問需要進行同步,這是單例模式需要解決的同步問題。 ?
參與者:Singleton:定義一個Instance操作,允許客戶訪問它的唯一實例,Instance是一個類操作。可能負責創建自己的唯一實例。 協作關系:客戶只能通過Singleton的Instance操作訪問一個Singleton的實例。 使用Singleton模式有許多優點: 1.???????? 對唯一實例的受控訪問, 2.???????? 縮小命名空間, 3.???????? 允許對操作和表示的精化, 4.???????? 允許可變數目的實例。 5.???????? 比類操作更靈活。 代碼: ?????? 單例模式中需要解決的重要問題是方法的同步問題,同步的粒度有多大等。在本例子中同在獲得類的實例的時候使用了同步,代碼如下: public class Singleton{ ? private Singleton(){ ??? generator = new Random(); ? } ? public void setSeed(int seed){ ??? generator.setSeed(seed); ? } ? public int nextInt(){ ??? return generator.nextInt(); ? } ? public static synchronized Singleton getInstance(){ ??? if (instance == null) { ????? instance = new Singleton(); ??? } ??? return instance; ? } ? private Random generator; ? private static Singleton instance; } 客戶端調用的代碼: package singleton; public class Client{ ??? public static void main(String[] args){ ?????? Singleton s1 = Singleton.getInstance(); ?????? System.out.println(s1.toString()); ?????? for(int i=0;i<10;i++){ ?????????? Singleton s2 = Singleton.getInstance(); ?????????? System.out.println("The randomed number is "+s2.toString()); ?????? } ??? } } 總結:單例模式使得應用程序在運行時保持只能有一個實例,在一些大的應用程序中,主程序只需要有一個,因此需要使用單例模式
轉載于:https://blog.51cto.com/tianli/43743
總結
以上是生活随笔為你收集整理的单例模式(singleton)解析例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成语招贤记114关答案 在线成语词典
- 下一篇: Ж孤云Ж真的很适合我