練就Java24章真經—你所不知道的工廠方法

前言

最近一直在Java方向奮鬥《終於,我仍是下決心學Java後臺了》,今天抽空開始學習Java的設計模式了
。計劃有時間就去學習,你這麼有時間,還不來一塊兒上車嗎?android

之因此要學習Java模式,是由於面試的時候有時間回答的不是太完整,面試事後纔想起來如何回答。因此,我說了: 只有總結纔是王道,只有總結才能提升git

設計模式

其實正規的來講Java實際上是23中設計模式,不過網上也有說是24種或者是26中的!設計模式不過是前人對代碼的一種封裝。用專業的話來說:設計模式是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結程序員

建立型模式,共五種:github

  • 1.工廠方法模式、
  • 2.抽象工廠模式、
  • 3.單例模式、
  • 4.建造者模式、
  • 5.原型模式。

結構型模式,共七種:面試

  • 6.適配器模式、
  • 7.裝飾器模式、
  • 8.代理模式、
  • 9.外觀模式、
  • 10.橋接模式、
  • 11.組合模式、
  • 12.享元模式。

行爲型模式,共十一種:數據庫

  • 13.策略模式、
  • 14.模板方法模式、
  • 15.觀察者模式、
  • 16.迭代子模式、
  • 17.責任鏈模式、
  • 18.命令模式、
  • 19.備忘錄模式、
  • 20.狀態模式、
  • 21.訪問者模式、
  • 22.中介者模式、
  • 23.解釋器模式。

今日重點:工廠方法模式

工廠模式是建立型模式之一,又稱爲靜態工廠方法模式!設計模式

優勢:
  • 1.良好的封裝性,代碼結構清晰。一個對象建立是有條件約束的,如一個調用者須要一個具體的產品對象,只要知道這個產品的類名(或約束字符串)就能夠了,不用知道建立對象的艱辛過程,減小模塊間的耦合。
  • 2.工廠方法模式的擴展性很是優秀。在增長產品類的狀況下,只要適當地修改具體的工廠類或擴展一個工廠類,就能夠完成「擁抱變化」。例如在咱們的例子中,須要增長一個棕色人種,則只須要增長一個BrownHuman類,工廠類不用任何修改就可完成系統擴展。
  • 3.屏蔽產品類。這一特色很是重要,產品類的實現如何變化,調用者都不須要關心,它只須要關心產品的接口,只要接口保持不表,系統中的上層模塊就不要發生變化,由於產品類的實例化工做是由工廠類負責,一個產品對象具體由哪個產品生成是由工廠類決定的。在數據庫開發中,你們應該可以深入體會到工廠方法模式的好處:若是使用JDBC鏈接數據庫,數據庫從MySql切換到Oracle,須要改動地方就是切換一下驅動名稱(前提條件是SQL語句是標準語句),其餘的都不須要修改,這是工廠方法模式靈活性的一個直接案例。
  • 4.工廠方法模式是典型的解耦框架。高層模塊值須要知道產品的抽象類,其餘的實現類都不用關心,符合迪米特原則,我不須要的就不要去交流;也符合依賴倒轉原則,只依賴產品類的抽象;固然也符合里氏替換原則,使用產品子類替換產品父類,沒問題!

缺點:框架

每次增長一個產品時,都須要增長一個具體類和對象實現工廠,是的系統中類的個數成倍增長,在必定程度上增長了系統的複雜度,同時也增長了系統具體類的依賴。這並非什麼好事。學習

用途:測試

第一種狀況是對於某個產品,調用者清楚地知道應該使用哪一個具體工廠服務,實例化該具體工廠,生產出具體的產品來。Java Collection中的iterator() 方法即屬於這種狀況。

第二種狀況,只是須要一種產品,而不想知道也不須要知道到底是哪一個工廠爲生產的,即最終選用哪一個具體工廠的決定權在生產者一方,它們根據當前系統的狀況來實例化一個具體的工廠返回給使用者,而這個決策過程這對於使用者來講是透明的。

典型例子:

車子繼承vehicle(車)類,有小汽車卡,公交車bus等,車子工廠實現工廠接口,工廠接口有抽象方法vehicle produce vehicle(String type)方法,車子工廠中實現工廠方法vehicle  produce vehicle(String Type),方法中根據須要new新的車子。

示例代碼:


 測試類:

注意事項

有人把工廠模式分爲: 簡單工廠模式 ,工廠方法模式,抽象工廠模式,因此多出一種模式,這裏簡單工廠模式比較簡單,實際中用的的不多,只在很簡單的狀況下用,沒啥好說的,聽說這不是一個真正的設計模式。在這裏我就不作討論了。但願 你們也不用糾結!

項目地址:

https://github.com/androidsta...

總結

學習一個知識點要知道是什麼,爲何,怎麼辦,要知其然。也要知其因此然!

閱讀更多

終於,我仍是下決心學Java後臺了

來談一下android中的MVVM

金9銀10的面試黃金季節,分享幾個重要的面試題

身爲程序員寫一百萬行代碼的感受

相信本身,沒有作不到的,只有想不到的

在這裏得到的不只僅是技術!

相關文章
相關標籤/搜索