您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關java的單例模式有什么優(yōu)缺點,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
一.什么是單例模式
單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。單例模式就是: 在程序運行期間, 某些類有且最多只有一個實例對象。這種模式涉及到一個單一的類,該類負責創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建。這個類提供了一種訪問其唯一的對象的方式,可以直接訪問,不需要實例化該類的對象。
二.單例模式的實現(xiàn)思路
1、靜態(tài)化實例對象, 讓實例對象與Class對象互相綁定, 通過Class類對象就可以直接訪問;
2、私有化構造方法, 禁止通過構造方法創(chuàng)建多個實例;
3、提供一個公共的靜態(tài)方法, 用來返回這個類的唯一實例。
三.單例模式的優(yōu)缺點
優(yōu)點:
1、在內(nèi)存里只有一個實例,減少了內(nèi)存的開銷,尤其是頻繁的創(chuàng)建和銷毀實例。
2、避免對資源的多重占用。
缺點:
沒有接口,不能繼承,與單一職責原則沖突,一個類應該只關心內(nèi)部邏輯,而不關心外面怎么樣來實例化。
四.單例模式的幾種不同寫法
1、懶漢式
package com.yx.singleton; /** * Singleton * <p>初級原型-懶漢式</> * <p>優(yōu)點:用到時再初始化</> * <p>缺點:并發(fā)下會產(chǎn)生多個實例</> * <p>不推薦</> * * @author yx * @date 2019/11/24 12:18 */ public class Singleton { /** * 靜態(tài)化實例對象 */ private static Singleton sInstance = null; /** * 私有構造方法 */ private Singleton() { } /** * 提供一個公共的靜態(tài)方法, 用來返回這個類的唯一實例. * * @return 單例對象 */ public static Singleton getInstance() { if (sInstance == null) { sInstance = new Singleton(); } return sInstance; } }
上面這種寫法,在并發(fā)環(huán)境下,會出現(xiàn)多個實例,線程不安全。
枚舉方式
/** * EnumSingleton * 枚舉類單例模式 * * <p>優(yōu)點:不需要考慮序列化的問題;不需要考慮反射的問題</> * <p>缺點:所有的屬性都必須在創(chuàng)建時指定, 也就意味著不能延遲加載; 并且使用枚舉時占用的內(nèi)存比靜態(tài)變量的2倍還多</> * * @author yx * @date 2019/11/24 15:09 */ public enum EnumSingleton { INSTANCE }
看完上述內(nèi)容,你們對java的單例模式有進一步的了解嗎?如果還想了解更多知識或者相關內(nèi)容,請關注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。