天天看點

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

今天我們一起看看

Java中的設計模式

為什麼要學習設計模式

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

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

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

學習設計模式的層次

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

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

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

單例設計模式

保證一個類在記憶體中隻能有一個對象。

思路:

1)如果其他程式能夠随意用 new 建立該類對象,那麼就無法控制個數。是以,不讓其他程式用 new 建立該類的對象。

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

3)該類将建立的對象對外(整個系統)提供,讓其他程式擷取并使用。

餓漢式:

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

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

懶漢式

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

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

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

懶漢式有一個缺點,就是在多線程中使用的時候,可能會建立多個執行個體對象,比如,線程1來調用 getInstance() 方法,判斷了 s==null,然後線程1由于未知的原因阻塞了,線程2再來調用 getInstance() 方法,判斷 s==null ,線程2就建立了一個對象,這時候線程1又運作了,那麼線程1就會建立一個對象~這樣就會造成多個對象~

懶漢式的線程優化——加一個鎖

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

餓漢式和懶漢式的差別:

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

2)在多線程通路的時候,懶漢式可能會建立多個對象,而餓漢式不會。

工廠模式

工廠模式:

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

代碼示範:

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

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

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

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

java中的設計模式之單例模式、工廠模式
優化後的代碼:
java中的設計模式之單例模式、工廠模式

優點:

用戶端不需要在負責對象的建立,進而明确了各個類的職責。

缺點:

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

工廠方法模式:

工廠方法模式中抽象工廠類負責定義建立對象的接口,具體對象的建立工作由繼承抽象工廠的具體類實作。

案例示範

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

優點

用戶端不需要在負責對象的建立,進而明确了各個類的職責,如果有新的對象增加,隻需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,後期維護容易,增強了系統的擴充性。

缺點

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

微信公衆号:javafirst

掃碼關注免費擷取更多資源 

繼續閱讀