為什麼要學習設計模式
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...