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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

asp.net

单例设计模式-饿汉式

發(fā)布時(shí)間:2024/4/13 asp.net 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例设计模式-饿汉式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
可以說(shuō)是單例模式中寫法最簡(jiǎn)單的一個(gè)方式,這個(gè)就是餓漢式,也就是在類加載的時(shí)候,就完成實(shí)例化,那他雖然簡(jiǎn)單,有沒(méi)有什么值得研究的地方呢,當(dāng)然是有的,首先我們先完成一個(gè)餓漢式的簡(jiǎn)單實(shí)現(xiàn) package com.learn.design.pattern.creational.singleton;import java.io.Serializable;/*** * @author Leon.Sun**/ public class HungrySingleton implements Serializable,Cloneable{/*** 我們直接聲明* 讓我們引用類名來(lái)做hungrySingleton* 我們首先new一個(gè)HungrySingleton* 也就是說(shuō)在類加載的時(shí)候* 就初始化了* 當(dāng)然這個(gè)在類加載的時(shí)候就初始化* 我們可以把它做成final的* 這樣這個(gè)對(duì)象就不可改了* 在類加載的時(shí)候就初始化加載好了* 也不需要更改了* 這個(gè)final看具體的情況* 這個(gè)就是一個(gè)非常簡(jiǎn)單的餓漢式* 優(yōu)點(diǎn)是寫法簡(jiǎn)單* 類加載的時(shí)候就完成了初始化* 避免了線程同步的問(wèn)題* 缺點(diǎn)也是應(yīng)為在類加載的時(shí)候呢就完成初始化* 沒(méi)有延遲加載的效果* 如果這個(gè)類從始至終我的系統(tǒng)沒(méi)有用過(guò)* 那會(huì)造成內(nèi)存的浪費(fèi)* 我們也可以把這個(gè)實(shí)例化的過(guò)程放到靜態(tài)代碼塊里面* * * */private final static HungrySingleton hungrySingleton;/*** 我們?cè)囈幌聅tatic* 我們使用過(guò)靜態(tài)塊* 來(lái)初始化properties的配置文件* * */static{/*** 然后new一下* 這里報(bào)紅線了* 因?yàn)樯厦媸莊inal的* 也給他初始化了* 所以靜態(tài)塊里邊* 并不能初始化* 如果用靜態(tài)塊的話* 我們可以把后面的new刪除掉* private final static HungrySingleton hungrySingleton;* 這樣就可以了* 那聲明為final的變量* 必須在類加載完成時(shí)* 已經(jīng)賦值* 第一種方式呢* 直接new出來(lái)* 或者放到靜態(tài)塊里邊* 這個(gè)都能完成在類加載的時(shí)候就完成賦值* 所以在lazy這種模式里邊* 它是不能修飾成final的* 因?yàn)樗皇窃陬惣虞d的時(shí)候就初始化好* 那對(duì)于餓漢式呢* 有用final的* 也有不用final的* 都可以* 因?yàn)轲I漢和懶漢之間* 最大的區(qū)別就是延遲加載* 是在類加載的時(shí)候初始化* 還是調(diào)用之后初始化* 那這個(gè)修飾符我們也要注意* 這兩個(gè)效果都是一樣的* 只不過(guò)hungrySingleton在內(nèi)存加載的時(shí)候* 把這個(gè)創(chuàng)建對(duì)象的過(guò)程* 放到了靜態(tài)代碼塊里邊* 那類加載的時(shí)候* 也會(huì)執(zhí)行靜態(tài)代碼塊中的代碼* 進(jìn)行初始化這個(gè)類的實(shí)例* 看上去餓漢式是最簡(jiǎn)單的* 如果我們的資源浪費(fèi)少的話* 用這種方式也是可以的* 因?yàn)檫@種方式比較簡(jiǎn)單* 就不領(lǐng)著debug了* 多線程的時(shí)候也是沒(méi)有問(wèn)題的* 因?yàn)轭惣虞d的時(shí)候就初始化好了* 所以這里面也不用做空判斷* 直接返回就可以了* 那這個(gè)就稱之為餓漢式* 前面我們還學(xué)過(guò)懶漢式* 那有什么技巧嗎* 很簡(jiǎn)單* 餓漢式因?yàn)樗莛I* 一上來(lái)就想吃東西* 所以就把這個(gè)對(duì)象一上來(lái)就new好了* 而懶漢式呢* 非常懶* 你不用他的時(shí)候他都不用創(chuàng)建對(duì)象* 可以利用這個(gè)記憶技巧記憶一下* 免得弄混* 我們會(huì)挖掘其他的安全隱患* * * */hungrySingleton = new HungrySingleton();}/*** 然后private的構(gòu)造器* */private HungrySingleton(){if(hungrySingleton != null){throw new RuntimeException("單例構(gòu)造器禁止反射調(diào)用");}}public static HungrySingleton getInstance(){/*** 直接return* */return hungrySingleton;}private Object readResolve(){return hungrySingleton;}@Overrideprotected Object clone() throws CloneNotSupportedException {return getInstance();} }

?

總結(jié)

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

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