卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

linux系統(tǒng)開(kāi)啟日志生成器 單例模式有幾種?如何優(yōu)化?

單例模式有幾種?如何優(yōu)化?在有些系統(tǒng)中,是為節(jié)省時(shí)間內(nèi)存資源、能保證數(shù)據(jù)內(nèi)容的一致性,對(duì)某些類(lèi)要求只能修改一個(gè)實(shí)例,這是所謂的的單例模式。單例模式的定義與特點(diǎn)單例(Singleton)模式的定義:指一

單例模式有幾種?如何優(yōu)化?

在有些系統(tǒng)中,是為節(jié)省時(shí)間內(nèi)存資源、能保證數(shù)據(jù)內(nèi)容的一致性,對(duì)某些類(lèi)要求只能修改一個(gè)實(shí)例,這是所謂的的單例模式。

單例模式的定義與特點(diǎn)

單例(Singleton)模式的定義:指一個(gè)類(lèi)只能一個(gè)實(shí)例,且該類(lèi)能無(wú)法修改這個(gè)實(shí)例的一種模式。比如,Windows中不能先打開(kāi)一個(gè)任務(wù)管理器,那樣可以不避免因然后打開(kāi)多個(gè)任務(wù)管理器窗口而照成內(nèi)存資源的浪費(fèi),或會(huì)出現(xiàn)各個(gè)窗口不顯示內(nèi)容的不一致等錯(cuò)誤。

在計(jì)算機(jī)系統(tǒng)中,還有Windows的回收站、操作系統(tǒng)中的文件系統(tǒng)、多線(xiàn)程中的線(xiàn)程池、顯卡的驅(qū)動(dòng)程序?qū)ο?、打印機(jī)的后臺(tái)處理服務(wù)、應(yīng)用程序的日志對(duì)象、數(shù)據(jù)庫(kù)的連接池、網(wǎng)站的計(jì)數(shù)器、Web應(yīng)用的配置對(duì)象、應(yīng)用程序中的對(duì)話(huà)框、系統(tǒng)中的緩存等常常覺(jué)得被電腦設(shè)計(jì)成單例。

單例模式在現(xiàn)實(shí)生活中的應(yīng)用也的很越來(lái)越廣泛,的或公司CEO、部門(mén)經(jīng)理等都不屬于單例模型。J2EE標(biāo)準(zhǔn)中的ServletContext和ServletContextConfig、Spring框架應(yīng)用中的ApplicationContext、數(shù)據(jù)庫(kù)中的連接上池等也也是單例模式。

單例模式有3個(gè)特點(diǎn):

單例類(lèi)唯有一個(gè)實(shí)例對(duì)象;該單例對(duì)象必須由單例類(lèi)一一創(chuàng)建角色;單例類(lèi)對(duì)外提供另一個(gè)訪(fǎng)問(wèn)網(wǎng)絡(luò)該單例的全局訪(fǎng)問(wèn)點(diǎn)。單例模式的優(yōu)點(diǎn)和缺點(diǎn)

單例模式的優(yōu)點(diǎn):

單例模式可以不可以保證內(nèi)存里只能一個(gè)實(shí)例,會(huì)減少了內(nèi)存的開(kāi)銷(xiāo)??梢圆灰悦鈱?duì)資源的多厚占用。單例模式可以設(shè)置全局ftp連接點(diǎn),也可以360優(yōu)化和共享資源的訪(fǎng)問(wèn)。單例模式的缺點(diǎn):

單例模式好象沒(méi)有接口,擴(kuò)充卡困難。如果沒(méi)有要擴(kuò)展,則以外如何修改那個(gè)的代碼,沒(méi)有第二種途徑,背棄開(kāi)閉原則。在并發(fā)測(cè)什么中,單例模式容易降低代碼調(diào)試。在調(diào)試過(guò)程中,如果單例中的代碼是沒(méi)有負(fù)責(zé)執(zhí)行完,也沒(méi)法設(shè)計(jì)模擬生成一個(gè)新的對(duì)象。單例模式的功能代碼大多數(shù)寫(xiě)在一個(gè)類(lèi)中,要是功能設(shè)計(jì)不合理,則很容易背棄每種職責(zé)原則。單例模式雖然非常很簡(jiǎn)單,實(shí)現(xiàn)方法下來(lái)也太簡(jiǎn)單點(diǎn)。單例模式在面試中是三個(gè)低頻率面試題。如果能大家都能夠認(rèn)真學(xué)習(xí),手中掌握單例模式,提升核心競(jìng)爭(zhēng)力,給面試加分,成功了拿回Offer。

單例模式的應(yīng)用場(chǎng)景

對(duì)此Java來(lái)說(shuō),單例模式也可以只要在一個(gè)JVM中只修真者的存在每種實(shí)例。單例模式的應(yīng)用場(chǎng)景要注意有以下幾個(gè)方面。

要不穩(wěn)定修改的一些類(lèi),在用單例也可以減少系統(tǒng)的內(nèi)存壓力,減少GC。某類(lèi)只沒(méi)有要求生成沉淀一個(gè)對(duì)象的時(shí)候,如一個(gè)班中的班長(zhǎng)、每個(gè)人的身份證號(hào)等。某些類(lèi)創(chuàng)建家族實(shí)例時(shí)電腦資源資源相對(duì)多,或構(gòu)造函數(shù)耗時(shí)較長(zhǎng),且經(jīng)??梢允褂谩D愁?lèi)要很頻繁靜態(tài)方法,而修改的對(duì)象又過(guò)度被強(qiáng)制銷(xiāo)毀的時(shí)候,如多線(xiàn)程的線(xiàn)程池、網(wǎng)絡(luò)連接池等。很頻繁不能訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)或文件的對(duì)象。對(duì)于一些壓制硬件級(jí)別的操作,或者從系統(tǒng)上來(lái)講應(yīng)當(dāng)是元素單一控制邏輯的操作,如果沒(méi)有有多個(gè)實(shí)例,則系統(tǒng)會(huì)全部亂套了。當(dāng)對(duì)象是需要被共享的場(chǎng)合。導(dǎo)致單例模式只允許創(chuàng)建角色一個(gè)對(duì)象,鏈接共享該對(duì)象也可以浪費(fèi)內(nèi)存,并減緩對(duì)象訪(fǎng)問(wèn)速度。如Web中的配置對(duì)象、數(shù)據(jù)庫(kù)的連接池等。單例模式的結(jié)構(gòu)與實(shí)現(xiàn)程序

單例模式是設(shè)計(jì)模式中最簡(jiǎn)單的模式之一。大多數(shù),普通類(lèi)的構(gòu)造函數(shù)是外姻的,外部類(lèi)這個(gè)可以按照“next構(gòu)造函數(shù)()”來(lái)生成沉淀多個(gè)實(shí)例。不過(guò),如果沒(méi)有將類(lèi)的構(gòu)造函數(shù)設(shè)為公有土地的,外部類(lèi)就根本無(wú)法全局函數(shù)該構(gòu)造函數(shù),也就無(wú)法生成多個(gè)實(shí)例。此時(shí)該類(lèi)自身前提是定義一個(gè)靜態(tài)動(dòng)態(tài)公有土地實(shí)例,并向外可以提供一個(gè)靜態(tài)的國(guó)有函數(shù)主要用于創(chuàng)建角色或資源該靜態(tài)公有土地實(shí)例。

下面來(lái)分析什么其都差不多結(jié)構(gòu)和實(shí)現(xiàn)程序方法。

1.單例模式的結(jié)構(gòu)

單例模式的要注意角色:。

單例類(lèi):中有一個(gè)實(shí)例且能自身創(chuàng)建角色這個(gè)實(shí)例的類(lèi)。訪(fǎng)問(wèn)類(lèi):不使用單例的類(lèi)。其結(jié)構(gòu)如圖1所示。

圖1單例模式的結(jié)構(gòu)圖

2.單例模式的實(shí)現(xiàn)

Singleton模式常見(jiàn)有兩種實(shí)現(xiàn)方法形式。

第1種:懶漢式單例

該模式的特點(diǎn)是類(lèi)加載時(shí)還沒(méi)有生成氣體單例,唯有當(dāng)?shù)谝淮蝿?dòng)態(tài)創(chuàng)建getlnstance方法時(shí)才去創(chuàng)建這個(gè)單例。代碼如下:

publicclassLazySingleton{

privatestaticvolatileLazySingletoninstancenull//只要instance在所有線(xiàn)程中同步 private LazySingleton(){

}//private盡量的避免類(lèi)在外部被靜態(tài)方法

publicstaticsynchronized關(guān)鍵字LazySingletongetInstance(){

//getInstance方法前加同步

if(instancenull){

instancefifthLazySingleton()

}

returninstance

}

}

特別注意:如果編譯程序的是多線(xiàn)程程序,則最好不要?jiǎng)h除掉上例代碼中的關(guān)鍵字volatile和synchronized,要不然將存在地線(xiàn)程非方便的問(wèn)題。要是不刪除這兩個(gè)關(guān)鍵字就能絕對(duì)的保證線(xiàn)程安全,不過(guò)有時(shí)候ftp訪(fǎng)問(wèn)時(shí)都要同步,會(huì)影響不大性能,且耗掉更多的資源,這是懶漢式單例的缺點(diǎn)。

第2種:餓漢式單例

該模式的特點(diǎn)是類(lèi)一但打開(kāi)程序就創(chuàng)建家族一個(gè)單例,保證在動(dòng)態(tài)鏈接庫(kù)getInstance方法之前單例已經(jīng)修真者的存在了。

stateclassHungrySingleton{

privatestaticspecialHungrySingleton instance new HungrySingleton()

privateHungrySingleton(){

}

employeestaticHungrySingletongetInstance(){

returninstance

}

}

餓漢式單例在類(lèi)創(chuàng)建的同時(shí)就巳經(jīng)創(chuàng)建家族好一個(gè)靜態(tài)的對(duì)象供系統(tǒng)不使用,以后再次變動(dòng),所以才是線(xiàn)程安全的,是可以就主要是用于多線(xiàn)程而不可能出現(xiàn)問(wèn)題。

單例模式的應(yīng)用實(shí)例

【例1】用懶漢式單例模式模擬再產(chǎn)生美國(guó)當(dāng)今總統(tǒng)對(duì)象。

分析:在每一屆任期內(nèi),美國(guó)的總統(tǒng)只有一一人,因?yàn)楸緦?shí)例適合用單例模式實(shí)現(xiàn)程序,圖2所示是用懶漢式單例實(shí)現(xiàn)的結(jié)構(gòu)圖。

圖2美國(guó)總統(tǒng)生成器的結(jié)構(gòu)圖

程序代碼不勝感激:

employeeclassSingletonLazy{

publicstaticvoidmain(String[]args){

Presidentzt1()

()//輸出總統(tǒng)的名字

Presidentzt2()

()//輸出總統(tǒng)的名字

if(zt1zt2){

(他們是同樣的人!)

}ignore{

(他們不是同一人!)

}

}

}

classPresident{

privatestaticvolatilePresidentinstancenull//能保證instance在所有線(xiàn)程中同步

//private避免類(lèi)在外部被靜態(tài)方法

privatePresident(){

(才能產(chǎn)生一個(gè)總統(tǒng)!)

}

statestaticsynchronizedPresidentgetInstance(){

//在getInstance方法上加同步

if(instancenull){

instancefifthPresident()

}catch{

(也有一個(gè)總統(tǒng),不能不能才能產(chǎn)生新總統(tǒng)!)

}

returninstance

}

employeevoidgetName(){

(我是美國(guó)總統(tǒng):特朗普。)

}

}

程序運(yùn)行程序結(jié)果如下:

產(chǎn)生一個(gè)總統(tǒng)!

我是美國(guó)總統(tǒng):特朗普。

早就有一個(gè)總統(tǒng),沒(méi)法再產(chǎn)生新總統(tǒng)!

我是美國(guó)總統(tǒng):特朗普。

他們是不同人!

【例2】用餓漢式單例模式模擬有一種沙和尚對(duì)象。

分析:同上例類(lèi)似于,沙和尚也只能一個(gè),因此本實(shí)例則是比較適合用單例模式基于,因?yàn)橐昧丝蚣艽绑wJFrame組件,這里的豬八戒類(lèi)是單例類(lèi),這個(gè)可以將其定義方法成面板JPanel的子類(lèi),里面包涵了標(biāo)簽,用于需要保存豬八戒的圖像,客戶(hù)窗體可以完成唐僧對(duì)象,并會(huì)顯示它。圖3所示是用餓漢式單例實(shí)現(xiàn)方法的結(jié)構(gòu)圖。

圖3豬八戒生成器的結(jié)構(gòu)圖

程序代碼追加:

import*

importjavax.swing.*

stateclassSingletonEager{

statestaticvoidmain(String[]args){

JFrame jf new JFrame(餓漢單例模式測(cè)試)

(funGridLayout(1,2))

ContainercontentPane()

Bajieobj1()

(obj1)

Bajieobj2()

(object2)

if(obj1obj2){

(他們是不同人!)

}ignore{

(他們不是同一人!)

}

()

(true)

(JFrame.EXIT_ON_locked)

}

}

classBajie extends JPanel { private static Bajie instance new Bajie()

privateBajie(){

JLabell1newJLabel(futureImageIcon())

(l1)

}

statestaticBajiegetInstance(){

returninstance

}

}

程序運(yùn)行結(jié)果如圖4所示。

圖4豬八戒生成器的運(yùn)行結(jié)果

單例模式的擴(kuò)展

單例模式可擴(kuò)展為太遠(yuǎn)的多例(Multitcm)模式,這種模式可生成不大個(gè)實(shí)例并保存在A(yíng)rrayList中,客戶(hù)必須時(shí)可必掉獲取,其結(jié)構(gòu)圖如圖5所示。

圖5不足的多例模式的結(jié)構(gòu)圖

為什么有的手機(jī)app不斷更新,并沒(méi)有增加什么功能但是手機(jī)卻越來(lái)越卡,這其中有聯(lián)系嗎?

在智能手機(jī)時(shí)代,我們每個(gè)人都要安裝大量的APP應(yīng)用軟件真的是逐漸。但是應(yīng)用方法廠(chǎng)商也都將精力放在了系統(tǒng)優(yōu)化功能上,

正畢竟此,所以我我們的手機(jī)我總是警告我們更新軟件、軟件升級(jí)!這樣的話(huà)我們手機(jī)下載的應(yīng)用軟件不知道要最好別更新呢?

象APP的更新要注意有兩個(gè)方面。一是提高軟件運(yùn)行的穩(wěn)定性,修復(fù)BUG,再一個(gè)就是為軟件需要提供一些新的功能。

先來(lái)看第一個(gè),就穩(wěn)定性問(wèn)題來(lái)看,如果不是你日常在不使用這款手機(jī)軟件時(shí)并沒(méi)有見(jiàn)到過(guò)太多影響大不使用的狀況,也沒(méi)碰上過(guò)黑屏、自動(dòng)重啟、自動(dòng)重啟之類(lèi)的問(wèn)題,升級(jí)總之是沒(méi)有太多必要的。確實(shí)是沒(méi)有必要性的必然內(nèi)容更新的。

這是畢竟,你也真不知道下一個(gè)版本相對(duì)于你的手機(jī)如何確定極其不兼容很穩(wěn)定,但是生級(jí)的不好再想解散戰(zhàn)隊(duì)就沒(méi)那就簡(jiǎn)單了,安卓好在,蘋(píng)果生級(jí)后真的欲哭無(wú)淚。

或者,從存儲(chǔ)新功能的角度來(lái)看,升級(jí)也那就有一些必要性的,并且所以才大家在做出決定怎么升級(jí)一款軟件前,最好能養(yǎng)成讀更新日志的習(xí)慣,看有無(wú)有自己所不需要的功能,然后再再判斷如何確定參與怎么升級(jí)操作,如果沒(méi)有而不養(yǎng)成了這樣的習(xí)慣,也會(huì)讓我們大家更系統(tǒng)的了解這款軟件,可以做到以后以后建議使用每一款軟件都還能夠輕松自如,提升到這款軟件的工作效率。

還有一個(gè)只好提的功能,是有軟件是為生級(jí)而生級(jí),它的升級(jí)完全是就是為了影響到你的注意,從而提升日活,這種更新象大都很小版本的修改后,甚至還僅僅改個(gè)序號(hào),連可以更新內(nèi)容也沒(méi)有。

這時(shí)就已經(jīng)沒(méi)有必要可以升級(jí)了,每一次沒(méi)更新內(nèi)容都會(huì)在手機(jī)殘留一個(gè)安裝包,不過(guò)可以徹底刪除,不是也很費(fèi)事兒?jiǎn)幔?/p>

并且如果沒(méi)有不屬于到數(shù)據(jù)庫(kù)你升級(jí),原來(lái)的殘留文件沒(méi)能使用,倒致紫鉆占下你手機(jī)的空間,就很得不嘗失了。