##查看代碼:https://gitee.com/jly521/factoryNew.gitgit
我的感悟:redis
- 設計模式都是處理複雜問題的,若是問題自己很簡單,使用設計模式反而累贅,增長了開發的複雜性
- 遇到最簡單的狀況,直接 new
- 若是建立對象的過程簡單(好比封裝一些頁面須要展現用的對象,數據來源可能來自不一樣的地方,能夠考慮在構造方法中封裝;再好比導出到excel的對象封裝),可是須要匹配不一樣狀況,返回不一樣對象時:考慮使用簡單工廠
- 若是遇到對象建立過程複雜(好比數據庫鏈接這樣的複雜對象,不只僅牽涉到new 一個對象這麼簡單),這樣須要把建立過程抽象出來,統一編寫,對外提供乾淨的接口調取便可:考慮使用工廠模式
- 若是遇到對象建立過程複雜、並且多對象匹配問題(好比默認去緩存庫redis取,若是緩存庫娶不到,去oracle數據庫取),在上一條咱們已經把redis、oracle的建立作成了工廠,此時須要對兩者統一再抽象一層:考慮使用抽象工廠
- 另外,相似汽車的建造也能夠理解爲抽象工廠模式,由於每一個零件,好比輪胎、發動機等的建造都是複雜的過程,均可以是工廠模式去實現建立過程,生產整個汽車在工廠模式(可能已是抽象工廠模式)上面再作一層抽象
簡單工廠模式(Factory)數據庫
- 作靜態工廠方法(StaticFactory Method)模式,但不屬於23 種設計模式之一
- 簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該建立哪個產品類
- Spring 中的BeanFactory 就是簡單工廠模式的體現,根據傳入一個惟一的標識來得到Bean 對象,可是否是在傳入參數後建立仍是傳入參數前建立這個要根據具體狀況來定
![](http://static.javashuo.com/static/loading.gif)
工廠方法模式(Factory Method)設計模式
應用場景:緩存
- 一般由應用程序直接使用new 建立新的對象,爲了將對象的建立和使用相分離,採用工廠模式,即應用程序將對象的建立及初始化職責交給工廠對象
- 通常狀況下,應用程序有本身的工廠對象來建立Bean
- 若是將應用程序本身的工廠對象交給Spring 管理,那麼Spring 管理的就不是普通的Bean,而是工廠Bean
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
抽象工廠模式
- 什麼時候使用:系統的產品有多於一個的產品族,而系統只消費其中某一族的產品
- 如何解決:在一個產品族裏面,定義多個產品。每一個具體的工廠負責一個產品族。抽象工廠的返回值爲最高級抽象產品
很是適合解決兩個維度的組合產品的構造問題,取其中一個維度做爲產品族,另一個維度做爲產品族中具體的多個產品
oracle