java單例,java單例代碼

本文目錄一覽:

在Java中,單例設計模式是什麼意思?有什麼優勢?

單例模式:保證一個類在使用過程中,只有一個實例。

優勢就是單例模式的作用,這個類永遠只有一個實例。

還在於可以節省內存,因為它限制了實例的個數,有利於Java垃圾回收。

java的學習建議:

首先要看書讀理論,不一定都懂,因為有一個懂的過程;

然後就是分析代碼,看看書上的代碼的意思,逐行逐行地看,去體會;

最重要的一點就是敲寫代碼,剛開始不會沒關係,照着書一行一行的敲,然後運行,觀察結果,把程序運行結果聯繫程序代碼,學得多一點了就嘗試修改代碼,改一點點看運行結果有什麼變化,便於理解程序內部執行的機制。

java 單例模式這個要怎麼理解?

單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。

這種模式涉及到一個單一的類,該類負責創建自己的對象,同時確保只有單個對象被創建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。

注意:

1、單例類只能有一個實例。

2、單例類必須自己創建自己的唯一實例。

3、單例類必須給所有其他對象提供這一實例。

介紹

意圖:保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。

主要解決:一個全局使用的類頻繁地創建與銷毀。

何時使用:當您想控制實例數目,節省系統資源的時候。

如何解決:判斷系統是否已經有這個單例,如果有則返回,如果沒有則創建。

關鍵代碼:構造函數是私有的。

應用實例:

1、一個班級只有一個班主任。

2、Windows 是多進程多線程的,在操作一個文件的時候,就不可避免地出現多個進程或線程同時操作一個文件的現象,所以所有文件的處理必須通過唯一的實例來進行。

3、一些設備管理器常常設計為單例模式,比如一個電腦有兩台打印機,在輸出的時候就要處理不能兩台打印機打印同一個文件。

優點:

1、在內存里只有一個實例,減少了內存的開銷,尤其是頻繁的創建和銷毀實例(比如管理學院首頁頁面緩存)。

2、避免對資源的多重佔用(比如寫文件操作)。

缺點:沒有接口,不能繼承,與單一職責原則衝突,一個類應該只關心內部邏輯,而不關心外面怎麼樣來實例化。

使用場景:

1、要求生產唯一序列號。

2、WEB 中的計數器,不用每次刷新都在數據庫里加一次,用單例先緩存起來。

3、創建的一個對象需要消耗的資源過多,比如 I/O 與數據庫的連接等。

注意事項:getInstance() 方法中需要使用同步鎖 synchronized (Singleton.class) 防止多線程同時進入造成 instance 被多次實例化。

Java單例模式是什麼意思?

Java單例模式是確保某個類只有一個實例,而且自行實例化並向整個系統提供這個實例,在計算機系統中,線程池、緩存、日誌對象、對話框、打印機、顯卡的驅動程序對象常被設計成單例的模式;

Java單例模式分三種:懶漢式單例、餓漢式單例、登記式單例。

(1)Java單例模式有以下特點:單例類只能有一個實例;單例類必須自己創建自己的唯一實例;單例類必須給所有其他對象提供這一實例。

(2)Java單例模式的應用範圍:每台計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中,每台計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。

JAVA單例模式有哪些?

一、懶漢式單例

在類加載的時候不創建單例實例。只有在第一次請求實例的時候的時候創建,並且只在第一次創建後,以後不再創建該類的實例。

public

class

LazySingleton

{

/**

*

私有靜態對象,加載時候不做初始化

*/

private

static

LazySingleton

m_intance=null;

/**

*

私有構造方法,避免外部創建實例

*/

private

LazySingleton(){

}

/**

*

靜態工廠方法,返回此類的唯一實例.

*

當發現實例沒有初始化的時候,才初始化.

*/

synchronized

public

static

LazySingleton

getInstance(){

if(m_intance==null){

m_intance=new

LazySingleton();

}

return

m_intance;

}

}

二、餓漢式單例

在類被加載的時候,唯一實例已經被創建。

public

class

EagerSingleton

{

/**

*

私有的(private)唯一(static

final)實例成員,在類加載的時候就創建好了單例對象

*/

private

static

final

EagerSingleton

m_instance

=

new

EagerSingleton();

/**

*

私有構造方法,避免外部創建實例

*/

private

EagerSingleton()

{

}

/**

*

靜態工廠方法,返回此類的唯一實例.

*

@return

EagerSingleton

*/

public

static

EagerSingleton

getInstance()

{

return

m_instance;

}

}

**************************************************************************************

懶漢方式,指全局的單例實例在第一次被使用時構建;

餓漢方式,指全局的單例實例在類裝載時構建

**************************************************************************************

三、登記式單例

這個單例實際上維護的是一組單例類的實例,將這些實例存放在一個Map(登記薄)中,對於已經登記過的實例,則從工廠直接返回,對於沒有登記的,則先登記,而後返回。

public

class

RegSingleton

{

/**

*

登記薄,用來存放所有登記的實例

*/

private

static

Map

m_registry

=

new

HashMap();

//在類加載的時候添加一個實例到登記薄

static

{

RegSingleton

x

=

new

RegSingleton();

m_registry.put(x.getClass().getName(),

x);

}

/**

*

受保護的默認構造方法

*/

protected

RegSingleton()

{

}

/**

*

靜態工廠方法,返回指定登記對象的唯一實例;

*

對於已登記的直接取出返回,對於還未登記的,先登記,然後取出返回

*

@param

name

*

@return

RegSingleton

*/

public

static

RegSingleton

getInstance(String

name)

{

if

(name

==

null)

{

name

=

“RegSingleton”;

}

if

(m_registry.get(name)

==

null)

{

try

{

m_registry.put(name,

(RegSingleton)

Class.forName(name).newInstance());

}

catch

(InstantiationException

e)

{

e.printStackTrace();

}

catch

(IllegalAccessException

e)

{

e.printStackTrace();

}

catch

(ClassNotFoundException

e)

{

e.printStackTrace();

}

}

return

m_registry.get(name);

}

/**

*

一個示意性的商業方法

*

@return

String

*/

public

String

about()

{

return

“Hello,I

am

RegSingleton!”;

}

}

在java開發中,為什麼要使用單例模式?

java單例模式確保一個類只有一個實例,自行提供這個實例並向整個系統提供這個實例。\x0d\x0a特點:\x0d\x0a1,一個類只能有一個實例;\x0d\x0a2,自己創建這個實例;\x0d\x0a3,整個系統都要使用這個實例。\x0d\x0a——————————–\x0d\x0aSingleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。在很多操作中,比如建立目錄 數據庫連接都需要這樣的單線程操作。一些資源管理器常常設計成單例模式。\x0d\x0a外部資源:譬如每台計算機可以有若干個打印機,但只能有一個Printer Spooler,以避免兩個打印作業同時輸出到打印機中。每台計算機可以有若干個通信端口,系統應當集中管理這些通信端口,以避免一個通信端口被兩個請求同時調用。\x0d\x0a內部資源,譬如,大多數的軟件都有一個(甚至多個)屬性文件存放系統配置。這樣的系統應當由一個對象來管理這些屬性文件。\x0d\x0a——————————–\x0d\x0a單例模式,能避免實例重複創建;\x0d\x0a單例模式,應用於避免存在多個實例引起程序邏輯錯誤的場合;\x0d\x0a單例模式,較節約內存。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/312898.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-06 15:17
下一篇 2025-01-06 15:17

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29

發表回復

登錄後才能評論