今天我們一起看看
Java中的設計模式
為什麼要學習設計模式
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)建立工廠類,寫出建立動物的方法~
優點:
用戶端不需要在負責對象的建立,進而明确了各個類的職責。
缺點:
這個靜态工廠類負責所有對象的建立,如果有新的對象增加,或者某些對象的建立方式不同,就需要不斷的修改工廠類,不利于後期的維護。
工廠方法模式:
工廠方法模式中抽象工廠類負責定義建立對象的接口,具體對象的建立工作由繼承抽象工廠的具體類實作。
案例示範
優點
用戶端不需要在負責對象的建立,進而明确了各個類的職責,如果有新的對象增加,隻需要增加一個具體的類和具體的工廠類即可,不影響已有的代碼,後期維護容易,增強了系統的擴充性。
缺點
需要額外的編寫代碼,增加了工作量
微信公衆号:javafirst
掃碼關注免費擷取更多資源