工厂模式以及应用简单解释
一個jpa引發的血案,項目中應用的jpa比較多,自己看了關于jpa相關的應用,然后打算了解一些源碼,但是不太能看懂。想知道為什么在jpa中定義了方法,就能夠操作數據庫,不定義方法也能操作數據庫,資料上說應用的代理設計模式,自己看過一些設計模式,但是并沒有太理解。自己又著重看了看代理設計模式,好像還是看不懂,然后跟身邊的一個大神,大學的好哥們交流,咨詢了一下,代理模式的實現原理。在學技術的時候我走入了一個誤區,感覺想深入的學習某項技術就應該了解源碼,了解源碼是沒有問題,但是我們應該從宏觀的角度看待問題、了解問題。例如代理模式,我們應用都會用,也都會去了解源碼,但是它是怎么實現代理的呢,我了解這個實現過程的時候就是直接去看底層的源碼,但是越看好像越迷糊,之所以這樣是因為我們沒有站在正確的角度看待問題,如果我們知道代理模式是如何實現的,那么了解代理模式的原理就沒有那么費勁了,雖然我看問題的角度可能對了,但是學藝不精,僅僅了解一些皮毛呀!我會在以后的博客中介紹代理模式的。
由jpa引起我的一些列要看的東西,反射->代理模式->工廠模式->反射的一系列應用->JPA原理->AOP原理等,希望能全部更新成博客,所以可能最近多更新一些博客。
只有在用到某項的時候,細細琢磨才會發現一些其中的強大,希望大家多多進步,如果有問題希望不吝賜教。
- 概述
- 簡單工廠模式
- 工廠模式
- 抽象工廠模式
概述
我暫時還沒有理解這個工廠模式的所有,只有在特定的場合下這個工廠模式的威力才能展現出來。工廠模式有三種基本形式,當然實現的方式是多樣的,
顧名思義,工廠是生產衣服,零件之類的比較多,在這里工廠模式就一個作用,產生對象的。工廠里的產品就是具體的對象,產生對象的地方就是工廠,工廠模式屬于創建型設計模式。
下面篇幅我都用的定義:產品工廠->生產具體的產品、產品->具體的產品、產品抽象類->定義某一類產品的和產品工廠是不同的、抽象工廠->產生產品對象的工廠。
簡單工廠模式
- 場景介紹:首先定義產品抽象類Car、Boat,那么的產品類別就定了兩個,如下的產品就屬于這兩個類別了,然后定義幾個具體的產品。抽象工廠類可以產品這兩類產品了(實際上這里并不是的類并不是抽象的,是一個實際的類用于產生具體的產品)
- UML展示類與類之間的關系:用網上的工具畫的,還挺好用的,我覺類圖有助于理解類與類之間的關系,遇到復雜的類,我覺得畫畫這個還是挺有用的。
-code:這里我只展示部分,我會把git地址留下。
public class StaticFactory {/*** CarFactory是一個靜態工廠類,初始化只有一個Benz類型的車* @return*/public Car getBenz(){return new Benz();}/*** 增加同種類型的車*/public Car getBwm(){return new Bwm();}/*** 工廠類中增加帶參數的不同種類的產品,只需要在工廠類中增加一條即可*/public Boat getBoat(String size){return new Yacht(size);}}//test類StaticFactory staticFactory = new StaticFactory();staticFactory.getBenz().type();- 用法:用一個類用來生成的對象,這個類就是工廠類,它的作用就是產生具體的產品對象,而每一個具體的產品對象,都會在工廠類中初始化,在工廠類中動態的決定生成那個具體產品的對象。
- 增加與刪除產品時:在工廠類中增加或者刪除對應的產品的對象,增加的產品可以是一類產品,也可不是一類產品。
- 優劣勢:
1)看著類圖就會感覺到,其實這個類與類之間的關系太復雜了,類的內聚性太差了,當某個具體的產品類發生改變時,抽象工廠類也需要修改。
2)對于初始化對象來說確實還是比較方便的。
3)擴展性也很好。 應用介紹:在spring beanFactory中的應用
在spring在xml中配置bean的相關信息,首先spring容器會讀取配置文件,將所有的bean初始成對應的對象,并給每個對象起一個名字,然后存入到Map中,map是的鍵是類的名字,value是bean,這里的bean也就是要創建的具體的產品的對象,這里產品可以有多種,利用map.contain(“key”)方法獲取具體的產品的信息,這里產品可以有多種,利用map.contain(“key”)方法獲取具體的產品的信息。
工廠模式
場景介紹:(每一個模式我都會重新定義場景,有助于理解),定義一個產品抽象類Car、該類產品具體產品、具體的產品工廠類(一個產品對應一個產品工廠類)、抽象工廠類(一類產品對應一個抽象工廠)。
UML展示類與類之間的關系:
當增加一類產品時,就相當于把這個圖重新畫一遍。開發的時候也是一樣的。
-code:
- 用法:同類產品存在同一個抽象類,每個具體的產品都存在生產該產品的工廠,該工廠用于初始化該產品的對象。抽象工廠類用于選擇那種產品的工廠。
- 增加或者刪除同類的產品時:首先增加或者刪除一個具體的產品,然后增加或者刪除產品工廠。
- 增加不同類的產品時:需要新增抽象工廠、產品抽象類、產品工廠、具體產品。ps:新增不同類型的好麻煩呀。
- 如果新的產品中增加參數:也就是初始化對象的時候增加了構造方法中需要入參。那么工廠方法就不太能用了,賊麻煩。
- 優勢:
- 產品抽象,生產的產品也抽象,當增加該類產品時,只需增加具體的產品和生產該產品的工程即可
- 對于增減產品的操作比較方便,擴展性比較好。
- 抽象工廠類之間的耦合性下降了,降低耦合性還是很有必要的。
抽象工廠模式
- 場景介紹:現在有兩種產品抽象類,幾個具體的產品,產品工廠,現在產品工廠強大了,能夠生產兩種產品了,抽象工廠也是一樣,能夠生產兩種產品了。
- UML展示類與類之間的關系:
- code:
- 抽象工廠模式和工廠方法模式之間的區別:從幾個方面
1)產品抽象類和具體產品(沒區別):需要增加一個產品抽象類和具體的產品。
2)產品工廠:可以產生多個產品。
3)抽象工廠:增加一個類別的產品不需要額外的增加抽象工廠,但是增加一個類產品時,其他的不需要的類也可能增加這個產品類別。
其實看起來工廠模式沒有什么東西,也容易理解,我在這里舉的例子也可能不太恰當,像這種設計模式只有在特定的情況下才能發揮其優勢的,雖然可能并沒有體會它的深意,也要理解它。
git 地址:
https://github.com/jtracydy/SpringBootTestDemo/tree/master/src/main/java/com/demo/d/factory/own
參考博客:
http://blog.csdn.net/zxt0601/article/details/52798423
http://blog.csdn.net/zxt0601/article/details/52798423
作圖工具地址 :https://www.processon.com/
UML圖參考博客:http://blog.csdn.net/jtracydy/article/details/78980315
總結
以上是生活随笔為你收集整理的工厂模式以及应用简单解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DSP-28027笔记
- 下一篇: CCF-CSP真题《202209-4—吉