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