强睡邻居人妻中文字幕,日本一区二区三区美女视频,精品人妻一区二区三区伊人,4p 插进来小说在线

<ul id="gecay"></ul>
  • 資訊 更多 >>
    頭一次見單例模式講的如此透徹_每日信息
    麥當(dāng)勞啤酒是什么? 天天百事通
    焦點速看:lol的fps是越高越好嗎_lo...
    成都上空驚現(xiàn)UFO?天文科普學(xué)者:可...
    手碟奏響央視《經(jīng)典詠流傳》,經(jīng)典...
    二線城市坐網(wǎng)約車有感:電動車普及...
    數(shù)控G96怎么用(數(shù)控g96) 天天快播報
    會計主要干些什么_會計主要做哪些工作
    河南地級市市委書記名單_河南地級市
    薺菜的功效與作用圖片和吃法_薺菜的...
    動態(tài)更多 >>
    你們,溫暖了2021
    西安市新增27個中風(fēng)險地區(qū) 目前有1...
    廣西新增本土確診病例1例
    哈爾濱市全域均為低風(fēng)險地區(qū)
    寒潮將影響我國中東部地區(qū) 四川盆...
    昆明至哈爾濱一航班發(fā)現(xiàn)1名入境復(fù)陽...
    陜西研考:封控區(qū)內(nèi)考生在原報考點...
    北京今日最高氣溫僅5℃ 明起強冷空...
    那年今日 | 歷史上的12月22日發(fā)生...
    我要找債主
    會展 更多 >>
    美籍釀酒師在崇禮:中國是第二故鄉(xiāng)...
    河南項城報告2名疑似新冠肺炎病例 ...
    浙江紹興確診病例首次零新增 上虞...
    廣西東興實行全員居家隔離 啟動口...
    新疆全方位推進鄉(xiāng)村振興 “富春山...
    云南瑞麗市主城區(qū)全員核酸檢測結(jié)果...
    內(nèi)蒙古滿洲里累計治愈出院本土確診...
    孫海洋夫妻驅(qū)車山東陽谷:還在為孫...
    大國工匠追夢“玉米強國”40載:用...
    專題報道 
    當(dāng)前位置: 資訊 > >> 正文
     
    頭一次見單例模式講的如此透徹_每日信息
    來源:博客園     時間:2023-06-23 12:29:46

    簡介

    單例模式是一種常用的軟件設(shè)計模式,用于創(chuàng)建類型。通過單例模式的方法創(chuàng)建的類在當(dāng)前進程中只有一個實例。單例模式的類只能允許一個實例存在。單例模式的作用是保證在整個應(yīng)用程序的生命周期中,任何一個時刻,單例類的實例都只存在一個。

    組成部分:


    (資料圖片)

    私有化構(gòu)造方法。私有化內(nèi)部實例。公有靜態(tài)方法用來獲取內(nèi)部實例。優(yōu)缺點

    單例模式的優(yōu)點有:

    提供了對唯一實例的受控訪問,可以保證對象的唯一性和一致性。減少了內(nèi)存開銷,避免了頻繁的創(chuàng)建和銷毀對象。避免了對資源的多重占用,例如文件操作、數(shù)據(jù)庫連接等。

    單例模式的缺點有:

    不支持繼承和多態(tài),違反了單一職責(zé)原則,一個類應(yīng)該只關(guān)心內(nèi)部邏輯,而不關(guān)心外部如何實例化。不易擴展,如果需要創(chuàng)建多個實例,就需要修改代碼,違反了開閉原則,一個類應(yīng)該對擴展開放,對修改關(guān)閉。不支持有參數(shù)的構(gòu)造函數(shù),如果需要傳遞參數(shù),就需要修改方法或者定義其他方法??赡艽嬖诜瓷浠蛘叻葱蛄谢?,破壞單例的唯一性。應(yīng)用場景

    單例模式適用于以下場景:

    需要頻繁創(chuàng)建和銷毀的對象,例如緩存、線程池、注冊表等。需要控制資源的訪問,例如文件操作、數(shù)據(jù)庫連接等。需要保證對象的唯一性和一致性,例如配置信息、全局變量等。Java 代碼示例

    在 Java 中,有五種不同的單例實現(xiàn)方法。其中包括餓漢式、懶漢式、雙檢鎖、靜態(tài)內(nèi)部類和枚舉類。單例模式的五種實現(xiàn)原理分別是餓漢式、懶漢式、雙重檢測、靜態(tài)內(nèi)部類和枚舉類。它們各自的優(yōu)缺點如下:

    餓漢式:原理是在類加載的時候,就創(chuàng)建并初始化一個靜態(tài)的實例對象,然后通過一個靜態(tài)的方法返回這個實例。優(yōu)點是線程安全,不需要加鎖;缺點是不支持延遲加載,可能會浪費資源。
    public class Singleton {    private Singleton() {}    private static Singleton instance;    public static synchronized Singleton getInstance() {        if (instance == null) {            instance = new Singleton();        }        return instance;    }}
    懶漢式:原理是在第一次調(diào)用獲取實例的方法時,才創(chuàng)建并初始化一個靜態(tài)的實例對象,然后返回這個實例。為了保證線程安全,需要給獲取實例的方法加上synchronized關(guān)鍵字。優(yōu)點是支持延遲加載,節(jié)省資源;缺點是線程不安全,需要加鎖,影響性能。
    public class Singleton {    private Singleton() {}    private static final Singleton instance = new Singleton();    public static Singleton getInstance() {        return instance;    }}
    雙重檢測:原理是在第一次調(diào)用獲取實例的方法時,先判斷靜態(tài)的實例對象是否為空,如果為空,則進入同步代碼塊,再判斷一次是否為空,如果為空,則創(chuàng)建并初始化一個靜態(tài)的實例對象,然后返回這個實例。為了防止指令重排序?qū)е驴罩羔槷惓#枰o靜態(tài)的實例對象加上volatile關(guān)鍵字。優(yōu)點是線程安全,支持延遲加載,不需要加鎖;缺點是可能會出現(xiàn)空指針異常,需要使用 volatile 關(guān)鍵字防止指令重排序。
    public class Singleton {    private Singleton() {}    private static volatile Singleton instance;    public static Singleton getInstance() {        if (instance == null) {            synchronized (Singleton.class) {                if (instance == null) {                    instance = new Singleton();                }            }        }        return instance;    }}
    靜態(tài)內(nèi)部類:原理是利用了 Java 靜態(tài)內(nèi)部類的特性,即外部類加載時不會加載內(nèi)部類,只有在使用到內(nèi)部類時才會加載。因此,在第一次調(diào)用獲取實例的方法時,才會加載靜態(tài)內(nèi)部類,并創(chuàng)建并初始化一個靜態(tài)的實例對象,然后返回這個實例。優(yōu)點是線程安全,支持延遲加載,不需要加鎖;缺點是不能防止反射或者反序列化攻擊。
    public class Singleton {    private Singleton() {}    private static class Instance {        private static final Singleton instance = new Singleton();    }    public static Singleton getInstance() {        return Instance.instance;    }}
    枚舉類:原理是利用了Java枚舉類型本身的特性,即枚舉類型在加載時就會創(chuàng)建所有的枚舉常量,并且保證了線程安全性和唯一性。因此,在調(diào)用獲取實例的方法時,直接返回枚舉常量即可。優(yōu)點是線程安全,簡單易用,可以防止反射或者反序列化攻擊;缺點是不支持延遲加載,不能繼承其他類。
    public enum Singleton {     INSTANCE;}

    這些不同的實現(xiàn)方式有不同的適用場景,需要根據(jù)具體的需求和條件來選擇。在這里,我只能給出一些個人的看法,僅供參考。

    如果對內(nèi)存資源比較敏感,或者單例對象不需要頻繁使用,可以考慮使用懶漢式或者雙重檢測,因為它們支持延遲加載,可以節(jié)省資源。如果對性能比較敏感,或者單例對象需要頻繁使用,可以考慮使用餓漢式或者靜態(tài)內(nèi)部類,因為它們不需要加鎖,可以提高效率。如果對安全性比較敏感,或者需要防止反射或者反序列化攻擊,可以考慮使用枚舉類,因為它可以保證實例的唯一性和不可變性。如果對簡潔性比較敏感,或者不需要繼承其他類,可以考慮使用枚舉類,因為它是最簡單的實現(xiàn)方式。

    個人來說在編碼效率和可維護性上我比較傾向于使用靜態(tài)內(nèi)部類的實現(xiàn)方式,既能保證線程安全性,又能支持延遲加載。

    Spring 代碼示例

    在 Spring 框架中,Spring 默認(rèn)使用單例模式來創(chuàng)建和管理 Bean 對象,但是可以通過 @Scope("singleton")注解來指定 Bean 對象的作用域。

    @Scope("singleton"):表示該Bean對象是一個單例對象,在整個Spring容器中只有一個實例。@Scope("prototype"):表示該Bean對象是一個原型對象,在每次請求時都會創(chuàng)建一個新的實例。@Scope("request"):表示該Bean對象的作用域是一個HTTP請求,在同一個請求中只有一個實例。@Scope("session"):表示該Bean對象的作用域是一個HTTP會話,在同一個會話中只有一個實例??偨Y(jié)

    單例模式是一種簡單而常用的設(shè)計模式,它可以保證一個類只有一個實例,并提供一個全局訪問點。單例模式有多種實現(xiàn)方式,各有優(yōu)缺點。單例模式可以節(jié)約系統(tǒng)資源,避免資源沖突,保證對象的唯一性和一致性。但是單例模式也有不利于繼承和擴展的缺點,以及可能存在的安全隱患。在使用單例模式時,需要根據(jù)具體情況和需求選擇合適的方法,并注意避免潛在的問題。

    關(guān)注公眾號【waynblog】每周分享技術(shù)干貨、開源項目、實戰(zhàn)經(jīng)驗、高效開發(fā)工具等,您的關(guān)注將是我的更新動力!

    關(guān)鍵詞:

    熱門推薦
    猜你喜歡
    色一情一交一乱一区二区| 俺来也中文字幕| 老婆中文字幕乱码中文乱码| 女生的逼逼视频| 99热这里全部都是精品| 一区二区三区日韩精品视频| 大鸡巴狂操丰满性感美女| 国产色老汉av网站新址| 国产麻豆精品一区二区三区| a片xxx成人免费网站| 男生艹女生高潮在线观看| 国产在线污黄片免费观看| 白白色亚洲一区| 欧美一级久久久久久久大| 欧美色欧美日韩亚洲视频| 浪小辉与健身教练gay| 鲁一鲁AV2019在线| 美女遭强高潮播放久久久久| 波多野结衣无码一区二区| 近距离观看大鸡巴操肥婆| 在线观看永久免费av片| 大鸡 吧操美女蜜臀av| 中国男子操美丽女子鸡巴| 精品亚洲大片精品免费看| 拔开女人毛茸茸的黑森林| 大鸡巴插爆出奶骚妇视频| 黑人操老逼视频| 精品一区二区三区四区蜜桃| 久久久久亚洲av成人麻豆| 午夜福利精品短视频在线| 妺妺窝人体色www金莲| 日韩做a爰片久久毛片蜜桃| 丝袜美女大黑吊| 亚洲无人区一码二码三码| 夜夜春宵伴娇熄H共妻H| 亚洲日本aⅤ片在线观看| 男大锤与女骚穴操操视频| 欧美精品区一区二区三区| 日韩视频你懂的| 91亚洲精品福利在线播放| 又黄又大又粗又爽的视频|