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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

小记:再谈单例模式静态类区别优势

發(fā)布時(shí)間:2025/3/17 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 小记:再谈单例模式静态类区别优势 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ?有時(shí)候感覺單例模式與靜態(tài)類的區(qū)別并不是那么明顯,都是與數(shù)據(jù)無關(guān)的操作類,即整個(gè)過程不能太多的數(shù)據(jù)依賴--更準(zhǔn)確的說是對(duì)象依賴,最好是其只負(fù)責(zé)處理某一類型(傳入的可以是接口)的對(duì)象,看看下面這段代碼:

interface IPeople {string Name { set;}int Age { set; }string ToStringPeople(); } class PeopleServer {public PeopleServer() { }public void ToStringPeople(IPeople p){Console.WriteLine(p.ToStringPeople());} }

這樣所有實(shí)現(xiàn)IPeople接口的對(duì)象都可以被PeopleServer處理,降低模塊間的耦合關(guān)系。那么靜態(tài)類與單例模式的具體區(qū)別在哪兒吶?

區(qū)別

單例模式

靜態(tài)類

繼承

可以繼承、實(shí)現(xiàn)接口

可以集成類,但不能實(shí)例成員

加載

單例模式比較靈活,可在需要的時(shí)候進(jìn)行初始化

其在編譯時(shí)就已經(jīng)初始化了,成本相對(duì)昂貴,即使不使用。

資源釋放

靜態(tài)對(duì)象不會(huì)被GC清除,除非整個(gè)CLR/JVM退出。

在靜態(tài)類中靜態(tài)方法產(chǎn)生的對(duì)象,當(dāng)起執(zhí)行結(jié)束后會(huì)被GC清除

多態(tài)

可以有多態(tài)

不支持多態(tài)

對(duì)象擴(kuò)展

因?yàn)閱卫J绞侵挥形ㄒ坏囊粋€(gè)實(shí)例,它可以跟隨系統(tǒng)進(jìn)行動(dòng)態(tài)的改變,有利于后期的增加和維護(hù),并且具有狀態(tài)性這一特征

不支持?jǐn)U展

再說一下單例模式的優(yōu)點(diǎn):例如DAO初始化會(huì)比較占用系統(tǒng)資源,如果經(jīng)靜態(tài)方法,會(huì)不斷初始化和釋放資源,這個(gè)時(shí)候如果不涉及復(fù)雜的事務(wù)管理,則使用單例模式會(huì)比較好。而且其使用方便,初始化靈活,個(gè)人感覺其優(yōu)于靜態(tài)類。

在舉個(gè)代碼的例子:

/// <summary> /// 站點(diǎn)偽Url信息類 /// </summary> public class SiteUrls {#region 內(nèi)部屬性和方法private static object lockHelper = new object();private static volatile SiteUrls instance = null;string SiteUrlsFile = Utils.GetXmlMapPath(DTKeys.FILE_SITE_XML_CONFING);private ArrayList _Urls;public ArrayList Urls{get { return _Urls; }set { _Urls = value; }}private NameValueCollection _Paths;public NameValueCollection Paths{get { return _Paths; }set { _Paths = value; }}private SiteUrls(){Urls = new ArrayList();Paths = new NameValueCollection();BLL.url_rewrite bll = new BLL.url_rewrite();List<Model.url_rewrite> ls = bll.GetList("");foreach (Model.url_rewrite model in ls){Paths.Add(model.name, model.path);model.page = model.page.Replace("^", "&");model.querystring = model.querystring.Replace("^", "&");Urls.Add(model);}}#endregionpublic static SiteUrls GetSiteUrls(){SiteUrls _cache = CacheHelper.Get<SiteUrls>(DTKeys.CACHE_SITE_HTTP_MODULE);lock (lockHelper){if (_cache == null){CacheHelper.Insert(DTKeys.CACHE_SITE_HTTP_MODULE, new SiteUrls(), Utils.GetXmlMapPath(DTKeys.FILE_URL_XML_CONFING));instance = CacheHelper.Get<SiteUrls>(DTKeys.CACHE_SITE_HTTP_MODULE);}}return instance;} }

注意這個(gè)時(shí)候的private ArrayList _Urls;就可以在系統(tǒng)運(yùn)行時(shí)動(dòng)態(tài)增加是可變的,當(dāng)我們更新SiteUrls的值的時(shí)候那么Cache對(duì)象對(duì)象已經(jīng)被Remove掉了,當(dāng)我們?cè)俅握{(diào)用它的時(shí)候那么return instance可能就發(fā)生變化了,因?yàn)橐俅螐臄?shù)據(jù)庫了更新數(shù)據(jù),把新數(shù)據(jù)放入緩存里面。


最后:歡迎各位大牛拍磚~~~






轉(zhuǎn)載于:https://blog.51cto.com/tongling/1247930

總結(jié)

以上是生活随笔為你收集整理的小记:再谈单例模式静态类区别优势的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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