日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单例模式(singleton)解析例子

發(fā)布時(shí)間:2023/12/31 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例模式(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)系:客戶只能通過SingletonInstance操作訪問一個(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。