java中的設計模式之單例模式 工廠模式

2021-09-24 23:19:17 字數 2078 閱讀 9449

為什麼要學習設計模式

1)設計模式都是一些相對優秀的解決方案,很多問題都是典型的、有代表性的問題,學習設計模式,我們就不用自己從頭來解決這些問題,相當於在巨人的肩膀上,復用這些方案即可。

2)設計模式已經成為專業人士的常用詞彙,不懂不利於交流。

3)能讓你設計的系統更加專業,讓系統有更好的架構。

學習設計模式的層次

1)基本入門級——套用型。

2)基本掌握級——可變形使用型。

3)真正理解和掌握級——思想上吸收和趨同型。

單例設計模式

保證乙個類在記憶體中只能有乙個物件。

思路:1)如果其他程式能夠隨意用 new 建立該類物件,那麼就無法控制個數。因此,不讓其他程式用 new 建立該類的物件。

2)既然不讓其他程式 new 該類物件,那麼該類在自己內部就要建立乙個物件,否則該類就永遠無法建立物件了。

3)該類將建立的物件對外(整個系統)提供,讓其他程式獲取並使用。

餓漢式:

一上來我就把物件給你 new 好了,你來了直接就可以拿去「吃」了

懶漢式要是有人問單例的延遲載入方式指的就是這種方式)

一開始我就不給你 new 物件,你來找我,我在給你建立乙個物件

懶漢式有乙個缺點,就是在多執行緒中使用的時候,可能會建立多個例項物件,比如,執行緒1來呼叫 getinstance() 方法,判斷了 s==null,然後執行緒1由於未知的原因阻塞了,執行緒2再來呼叫 getinstance() 方法,判斷 s==null ,執行緒2就建立了乙個物件,這時候執行緒1又執行了,那麼執行緒1就會建立乙個物件~這樣就會造成多個物件~

懶漢式的執行緒優化——加乙個鎖

餓漢式和懶漢式的區別:

1)餓漢式是空間換時間,懶漢式是空間換時間。

2)在多執行緒訪問的時候,懶漢式可能會建立多個物件,而餓漢式不會。

工廠模式

工廠模式:

又叫靜態工廠方法模式,它定義乙個具體的工廠類負責建立一些類的例項

**演示:

1)寫乙個動物抽象類 animal 裡面有乙個抽象的方法 eat()

2)具體狗類 dog 繼承 animal 類,實現抽象方法 eat() 狗吃肉

3)具體貓類 cat 繼承 animal 類,實現eat()方法 貓吃魚

4)建立工廠類,寫出建立動物的方法~

優化後的**:

優點:

客戶端不需要在負責物件的建立,從而明確了各個類的職責。

缺點:

這個靜態工廠類負責所有物件的建立,如果有新的物件增加,或者某些物件的建立方式不同,就需要不斷的修改工廠類,不利於後期的維護。

工廠方法模式:

工廠方法模式中抽象工廠類負責定義建立物件的介面,具體物件的建立工作由繼承抽象工廠的具體類實現。

案例演示

優點

客戶端不需要在負責物件的建立,從而明確了各個類的職責,如果有新的物件增加,只需要增加乙個具體的類和具體的工廠類即可,不影響已有的**,後期維護容易,增強了系統的擴充套件性。

缺點

需要額外的編寫**,增加了工作量

Java中的設計模式之單例模式

定義 是一套反覆被人使用,多數人知曉的,經過分類編目的,設計經驗的總結.使用設計模式是為了重用 讓 更容易被他人理解,保證 可靠性.毫無疑問,設計模式於己於他人於系統都是多贏的 設計模式使 編制真正工程化 設計模式是軟體工程的基石脈絡,如同大廈的結構一樣.最簡單,最常用的設計模式 目的 保證在整個應...

java設計模式之單例模式

單位面試題目中有一道關於單例模式的題目.大多數參加筆試的同事都會寫出getinstance這個函式,但是當我問起什麼情況下需要使用單例 單例具體有什麼好處的時候 static函式也可以構建唯一例項,為什麼還需要單例.從使用單例的經驗來看,如下場景下,個人感覺應該使用單例 1.如果需要構建乙個工具類,...

java設計模式 之 單例模式

單例模式 有些類在程式執行過程中只需要儲存乙個例項,比如檔案管理類,音訊管理類,那麼我們如何實現乙個單例類呢?有以下幾點 1 定義乙個靜態變數 2 建構函式私有化 3 提供乙個public 靜態方法,獲取這個例項 4 一定要做執行緒同步 public static class singleton p...