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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

[设计模式] ------ 单例模式

發(fā)布時(shí)間:2024/7/23 asp.net 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [设计模式] ------ 单例模式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

單例模式,是眾多設(shè)計(jì)模式中,寫法最多,套路最多,坑最多,面試被問最多的設(shè)計(jì)模式。
基本上,單例模式在面試中已經(jīng)被問爛了,依稀記得我的上家公司面試我的時(shí)候,說到設(shè)計(jì)模式,直接就說,寫一種設(shè)計(jì)模式,但單例除外。
但不得不說,單例由于其概念簡(jiǎn)單,實(shí)用性廣的特點(diǎn),在項(xiàng)目中很是常見。

概念:

單例模式就是確保一個(gè)類只有一個(gè)實(shí)例的設(shè)計(jì)模式。
設(shè)計(jì)的思路無非就是先new一個(gè)實(shí)例,以后都用這個(gè)實(shí)例就行了。
難點(diǎn)在于什么時(shí)機(jī)new出這個(gè)實(shí)例,以及如何確保有且只有這一個(gè)實(shí)例。

五種常見的單例實(shí)現(xiàn)

第一種:餓漢式(新手寫法)

提前加載,所以也無法延遲加載,效率不高,不推薦

public class HungurySingleton { //缺點(diǎn),無法延時(shí)加載,沒有使用就已經(jīng)加載了private static final HungurySingleton mInstance = new HungurySingleton();private HungurySingleton(){}public static HungurySingleton getHunguryInstance(){return mInstance;} }

第二種:懶漢式(入門寫法)

沒有提前加載,但多線程下并發(fā)可能會(huì)出現(xiàn)多個(gè)實(shí)例

public class LazySingleton {private static LazySingleton mInstance;private LazySingleton(){}public static LazySingleton getmInstance(){if(mInstance == null){//就是這里,如果兩個(gè)線程并發(fā)訪問,里面的new語句就會(huì)執(zhí)行兩次mInstance = new LazySingleton();}return mInstance;} }

第三種:雙重檢查鎖(能寫出這個(gè),就有點(diǎn)東西了)

很明顯,這樣寫,就不怕上面的那種并發(fā)問題了

public class DLCSingleton {private static volatile DLCSingleton mInstance =null; //volatile關(guān)鍵字是為了禁止編譯器對(duì) volatile關(guān)鍵字修飾的變量進(jìn)行重排序,并保證volatile變量的讀操作發(fā)生在寫操作之后private DLCSingleton(){}public static DLCSingleton getmInstance(){if(mInstance == null){ //第一次檢查synchronized (DLCSingleton.class){ //同步代碼塊if(mInstance == null){ //第二次檢查mInstance = new DLCSingleton();}}}return mInstance;} }

第四種:靜態(tài)內(nèi)部類實(shí)現(xiàn)(高手寫法)

利用靜態(tài)內(nèi)部類是在被調(diào)用時(shí)才會(huì)被加載,算是延遲加載
static final 修飾instance,初始化后就不會(huì)被修改,保證線程安全

public class StaticInnerSingleton { //完成了懶漢式的延遲加載,同時(shí)static保證了線程安全。private StaticInnerSingleton(){}public static StaticInnerSingleton getIntance(){return SingletonHolder.mIntance;}private static class SingletonHolder{ //私有的,初始化的時(shí)候,沒有調(diào)用getIntance方法則不會(huì)加載//static,final是jvm提供的同步機(jī)制,初始化后就無法修改了private static final StaticInnerSingleton mIntance = new StaticInnerSingleton(); } }

第五種:(牛人寫法)

枚舉做單例,think in java中的神思想,雖然我從來沒見過誰在項(xiàng)目中實(shí)戰(zhàn)用到
但看這個(gè)網(wǎng)上說的熱火朝天,也是各種好處,比如寫法簡(jiǎn)單,線程安全

public enum EnumSingleton {SPRING,SUMMER,AUTUMN,WINTER; }

總結(jié):

我只是列出常用的,當(dāng)然,還有其他版本
比如靜態(tài)代碼塊的寫法,
還有雙重檢查鎖前一個(gè)版本,就是沒有第一步判空的寫法,
還有用synchronized修飾方法的寫法等等。

是我的話,一般情況下,
確保項(xiàng)目肯定沒有并發(fā)的話,懶漢寫法就沒問題了。
一考慮到并發(fā),就用雙重檢查鎖的寫法,是常用而且穩(wěn)定的。
至于枚舉寫法,總之我還沒有習(xí)慣這么寫,可以嘗試用用。

以上是個(gè)人意見,歡迎評(píng)論指正。

總結(jié)

以上是生活随笔為你收集整理的[设计模式] ------ 单例模式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 日本大奶子视频 | 99色精品| 黑森林av凹凸导航 | 97视频| 69精品| 国产男男一区二区三区 | 国产成人无码专区 | 林天顾悦瑶笔趣阁 | 女性女同性aⅴ免费观女性恋 | 98久久| 色呦呦麻豆 | 国产高清视频在线免费观看 | 舐丝袜脚视频丨vk | av污在线观看 | 久久7777 | 中文字幕被公侵犯的漂亮人妻 | 激情av网站 | 欧美做爰性生交视频 | 国产网红在线观看 | 免费看欧美大片 | av网站黄色 | 男生女生羞羞网站 | 少女国产免费观看 | 中文字幕欧美专区 | 欧美性受视频 | 美国三级a三级18 | 亚洲一级黄色 | 亚洲天堂av中文字幕 | 超碰伊人网 | 日本特黄特黄刺激大片 | 欧美色xxx | 制服.丝袜.亚洲.中文.综合懂色 | 国产h自拍| 成人av网页| 欧美美女性高潮 | 超碰在线综合 | 欧美激情视频在线观看 | 怡红院院av| www.激情.com| 中文字幕一区二区久久人妻网站 | 伊人网色 | 久久网站免费观看 | 日日夜夜综合 | www色亚洲 | 免费看91视频 | 伊人成综合网 | 日本免费视频 | 特一级黄色片 | 男生插女生的视频 | 黄色片久久久久 | 国产盗摄一区二区三区 | 91爱爱com| 亚洲国产精 | 人人爱人人艹 | 美女mm131爽爽爽免费动视频 | 亚洲一级大片 | 欧美涩涩涩 | jizz美女 | 丝袜视频一区 | 亚洲精品视频在线观看视频 | 欧美日韩人妻精品一区 | 国产成人综合欧美精品久久 | 欧美精品免费一区二区 | 寡妇激情做爰呻吟 | 懂色av一区二区 | 成人毛片在线播放 | 日韩天堂在线 | 成人a视频在线观看 | 一级片自拍 | 美女视频黄免费 | 欧美激情一区二区三区蜜桃视频 | 97天天干 | 国产 福利 在线 | 丁香社区五月天 | 精品综合久久 | 国产成人不卡 | av国产在线观看 | 国产a线| 色婷婷久 | 免费久久精品视频 | 精品美女在线 | 少妇做爰免费理伦电影 | www.777含羞草| 欧美巨大另类极品videosbest | 欧美亚洲一区二区在线观看 | 一区二区三区四区中文字幕 | 美女三级黄色片 | 国产精品综合久久 | 国产情侣免费视频 | 久久成人精品 | 国产免费一区视频观看免费 | 中文字幕1区2区3区 www.com黄色片 | 中文免费在线观看 | 国产人妻大战黑人20p | 97爱爱视频| 99国产在线观看 | 亚洲av无码国产精品久久 | 国产人妻精品一区二区三区 | 成人做爰9片免费视频 |