1. 程式人生 > >java中的設計模式之單例模式、工廠模式

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

Java中的設計模式            轉載地址:https://www.toutiao.com/i6573486403282272775/

為什麼要學習設計模式

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

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

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

學習設計模式的層次

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

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

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

單例設計模式

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

思路:

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

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

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

餓漢式:

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

Java學習:java中的設計模式之單例模式、工廠模式

懶漢式

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

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

Java學習:java中的設計模式之單例模式、工廠模式

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

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

Java學習:java中的設計模式之單例模式、工廠模式

餓漢式和懶漢式的區別:

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

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

工廠模式

工廠模式:

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

程式碼演示:

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

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

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

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

Java學習:java中的設計模式之單例模式、工廠模式

優化後的程式碼:

Java學習:java中的設計模式之單例模式、工廠模式

優點:

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

缺點:

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

工廠方法模式:

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

案例演示

Java學習:java中的設計模式之單例模式、工廠模式

優點

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

缺點

需要額外的編寫程式碼,增加了工作量