導航:首頁 > 解決方法 > 簡單工廠工廠方法抽象

簡單工廠工廠方法抽象

發布時間:2022-06-08 02:43:38

① 工廠模式的抽象工廠

工廠模式中有: 工廠方法(Factory Method) 抽象工廠(Abstract Factory).
這兩個模式區別在於需要創建對象的復雜程度上。如果我們創建對象的方法變得復雜了,如上面工廠方法中是創建一個對象Sample,如果我們還有新的產品介面Sample2.
這里假設:Sample有兩個實體類SampleA和SampleB,而Sample2也有兩個實體類Sample2A和Sample2B
那麼,我們就將上例中Factory變成抽象類,將共同部分封裝在抽象類中,不同部分使用子類實現,下面就是將上例中的Factory拓展成抽象工廠: publicabstractclassFactory{publicabstractSamplecreator();publicabstractSample2creator(Stringname);}{publicSamplecreator(){.........returnnewSampleA}publicSample2creator(Stringname){.........returnnewSample2A}}{publicSamplecreator(){......returnnewSampleB}publicSample2creator(Stringname){......returnnewSample2B}}從上面看到兩個工廠各自生產出一套Sample和Sample2,也許你會疑問,為什麼我不可以使用兩個工廠方法來分別生產Sample和Sample2?
抽象工廠還有另外一個關鍵要點,是因為 SimpleFactory內,生產Sample和生產Sample2的方法之間有一定聯系,所以才要將這兩個方法捆綁在一個類中,這個工廠類有其本身特徵,也許製造過程是統一的,比如:製造工藝比較簡單,所以名稱叫SimpleFactory。
在實際應用中,工廠方法用得比較多一些,而且是和動態類裝入器組合在一起應用,
舉例
我們以Jive的ForumFactory為例,這個例子在前面的Singleton模式中我們討論過,再討論其工廠模式: {privatestaticObjectinitLock=newObject();privatestaticStringclassName="com.jivesoftware.forum.database.DbForumFactory";=null;(Authorizationauthorization){//,returnnull.if(authorization==null){returnnull;}//以下使用了Singleton單態模式if(factory==null){synchronized(initLock){if(factory==null){......try{//動態轉載類Classc=Class.forName(className);factory=(ForumFactory)c.newInstance();}catch(Exceptione){returnnull;}}}}//Now,返回proxy.用來限制授權對forum的訪問returnnewForumFactoryProxy(authorization,factory,factory.getPermissions(authorization));}//真正創建forum的方法由繼承forumfactory的子類去完成.(Stringname,Stringdescription)throwsUnauthorizedException,ForumAlreadyExistsException;....}因為Jive是通過資料庫系統存放論壇帖子等內容數據,如果希望更改為通過文件系統實現,這個工廠方法ForumFactory就提供了提供動態介面:
private static String className = "com.jivesoftware.forum.database.DbForumFactory";
你可以使用自己開發的創建forum的方法代替com.jivesoftware.forum.database.DbForumFactory就可以.
在上面的一段代碼中一共用了三種模式,除了工廠模式外,還有Singleton單態模式,以及proxy模式,proxy模式主要用來授權用戶對forum的訪問,因為訪問forum有兩種人:一個是注冊用戶 一個是遊客guest,那麼那麼相應的許可權就不一樣,而且這個許可權是貫穿整個系統的,因此建立一個proxy,類似網關的概念,可以很好的達到這個效果.
看看Java寵物店中的CatalogDAOFactory: publicclassCatalogDAOFactory{/***本方法制定一個特別的子類來實現DAO模式。*具體子類定義是在J2EE的部署描述器中。*/publicstaticCatalogDAOgetDAO()throwsCatalogDAOSysException{CatalogDAOcatDao=null;try{InitialContextic=newInitialContext();//動態裝入CATALOG_DAO_CLASS//可以定義自己的CATALOG_DAO_CLASS,從而在無需變更太多代碼//的前提下,完成系統的巨大變更。StringclassName=(String)ic.lookup(JNDINames.CATALOG_DAO_CLASS);catDao=(CatalogDAO)Class.forName(className).newInstance();}catch(NamingExceptionne){("CatalogDAOFactory.getDAO:: "+ne.getMessage());}catch(Exceptionse){("CatalogDAOFactory.getDAO:ExceptionwhilegettingDAOtype: "+se.getMessage());}returncatDao;}}CatalogDAOFactory是典型的工廠方法,catDao是通過動態類裝入器className獲得CatalogDAOFactory具體實現子類,這個實現子類在Java寵物店是用來操作catalog資料庫,用戶可以根據資料庫的類型不同,定製自己的具體實現子類,將自己的子類名給與CATALOG_DAO_CLASS變數就可以。
由此可見,工廠方法確實為系統結構提供了非常靈活強大的動態擴展機制,只要我們更換一下具體的工廠方法,系統其他地方無需一點變換,就有可能將系統功能進行改頭換面的變化。
設計模式如何在具體項目中應用見《Java實用系統開發指南》

② 抽象工廠和工廠方法模式在應用中的不同作用

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的創建型模式。其主要功能都是幫助我們把對象的實例化部分抽取了出來,優化了系統的架構,並且增強了系統的擴展性。

本文是本人對這三種模式學習後的一個小結以及對他們之間的區別的理解。

簡單工廠

簡單工廠模式的工廠類一般是使用靜態方法,通過接收的參數的不同來返回不同的對象實例。

不修改代碼的話,是無法擴展的。

小結

★工廠模式中,重要的是工廠類,而不是產品類。產品類可以是多種形式,多層繼承或者是單個類都是可以的。但要明確的,工廠模式的介面只會返回一種類型的實例,這是在設計產品類的時候需要注意的,最好是有父類或者共同實現的介面。

★使用工廠模式,返回的實例一定是工廠創建的,而不是從其他對象中獲取的。

★工廠模式返回的實例可以不是新創建的,返回由工廠創建好的實例也是可以的。

區別

簡單工廠



用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)

工廠方法 :用來生產同一等級結構中的固定產品。(支持增加任意產品)


抽象工廠
:用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支持增加產品族)

以上三種工廠

方法在等級結構和產品族這兩個方向上的支持程度不同。所以要根據情況考慮應該使用哪種方法。

③ 工廠模式,簡單工廠模式,抽象工廠模式 三者有什麼區別

工廠模式的好處就在於將工廠和產品之間的耦合降低,將具體產品的構造過程放在了具體工廠類裡面。在以後擴展產品的時候方便很多,只需要添加一個工廠類,一個產品類,就能方便的添加產品,而不需要修改原有的代碼。而在簡單工廠中,如果要增加一個產品,則需要修改工廠類,增加if/else分支,或者增加一個case分支,工廠模式符合軟體開發中的OCP原則(open close principle),對擴展開放,對修改關閉。
抽象工廠模式:這個模式我總是感覺和builder模式非常相似。
工廠方法模式提供的是對一個產品的等級模式,,而抽象工廠方法提供的是對多個產品的等級模式,注意,這里的多個具體產品之間是相互耦合的,也就是說這里的抽象工廠提供的產品之間是存在某種聯系的。
有人做如下的比較:
工廠方法模式:一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。
抽象工廠模式:多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。
區別:工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。
下面是一個形象的比喻:
無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作介面,以達到最大程度上的復用。拿一個生產水杯(cup)的工廠舉例:起初,不用工廠模式,我必須在生產水杯之前知道水杯的材料和形狀等水杯的所有特徵才能生產,這就是我們的new Cup();這個Cup必須是具體的。廠主發現同一形狀的被子,只是材料不同,如一個是玻璃(glass)的,一個是瓷(china)的,但是確要兩條生產線,顯然有資源浪費的嫌疑。現在廠主生產杯子時先不讓生產線知道我要產的是玻璃的還是瓷的,而是讓它在不知道具體材料的情況下先做它能做的,等到它把模具做好,只需要向其中填充玻璃原料或者瓷原料就可以造出同一形狀的具體杯子了。但是很可惜,java並不能new一個抽象的Cup,所以就有了簡單工廠模式。原來是Cup cup=new Cup;現在是SimpleCupFactory.createCup(String cupName),根據cup的名字生產Cup,而createCup返回的是一個實現了 Cup介面或抽象類的具體Cup。簡單抽象工廠模式有一個問題,就是當我現在想生產一個同樣形狀的鐵杯時,工廠里並沒有定義相應的處理流程,只能更改createCup方法,這就不合理了。我現在只是想生產鐵杯,你只要在最後的時候把玻璃原料換成鐵的不就行了嗎,幹嘛還要更改整條生產線呢?於是就有了工廠模式。原來生產線在生產模具的時候還要考慮是為玻璃杯生產的模具還是為鐵杯生產的模具,現在它不用管了。CupFactory.createCup()創建Cup.CupFactory是介面或抽象類。實現它的具體子類會創建符合Cup介面的具體Cup。那麼現在廠主想要生產水壺(kettle),用工廠模式就不得不再造一條水壺生產線,能不能在水杯生產線同時生產水壺呢?這就是抽象工廠模式。

④ 什麼是簡單工廠和工廠方法

簡單工廠又叫靜態工廠 工廠方法又叫多態性工廠 抽象工廠又叫工具箱 區別: 先看簡單工廠的缺點:復雜的多層次結構;工廠類形成上帝類;靜態方法無法由子類繼承;擴展困難,對開閉原則支持不夠。 工廠方法就是為了克服以上缺點產生的。他將上帝類要做的事分給了下面的子類來完成,它比簡單工廠抽象 而抽象工廠比前兩者更抽象,更具一般性. 他可以提供統一的介面,使得不必說明具體狀況的情況下,創建多種不同的對象

⑤ 簡單工廠模式與工廠方法模式的相同點和不同點

建議LZ把簡單工廠,工廠方法和抽象工廠一起研究下,呵呵,前一段我老師讓我研究下這3種模式的不同,一起學習可能更明白了。
簡單工廠模式又稱靜態工廠方法模式。重命名上就可以看出這個模式一定很簡單。它存在的目的很簡單:定義一個用於創建對象的介面。
先來看看它的組成:
1)工廠類角色:這是本模式的核心,含有一定的商業邏輯和判斷邏輯。在java中它往往由一個具體類實現。
2)抽象產品角色:它一般是具體產品繼承的父類或者實現的介面。在java中由介面或者抽象類來實現。
3)具體產品角色:工廠類所創建的對象就是此角色的實例。在java中由一個具體類實現。
工廠方法模式去掉了簡單工廠模式中工廠方法的靜態屬性,使得它可以被子類繼承。這樣在簡單工廠模式里集中在工廠方法上的壓力可以由工廠方法模式里不同的工廠子類來分擔。
看下它的組成:
1)抽象工廠角色: 這是工廠方法模式的核心,它與應用程序無關。是具體工廠角色必須實現的介面或者必須繼承的父類。在java中它由抽象類或者介面來實現。
2) 具體工廠角色:它含有和具體業務邏輯有關的代碼。由應用程序調用以創建對應的具體產品的對象。
3)抽象產品角色:它是具體產品繼承的父類或者是實現的介面。在java中一般有抽象類或者介面來實現。
4)具體產品角色:具體工廠角色所創建的對象就是此角色的實例。在java中由具體的類來實現。

⑥ 簡單工廠模式,工廠方法模式和抽象工廠模式有何區別

工廠方法模式:
一個抽象產品類,可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類只能創建一個具體產品類的實例。

抽象工廠模式:
多個抽象產品類,每個抽象產品類可以派生出多個具體產品類。
一個抽象工廠類,可以派生出多個具體工廠類。
每個具體工廠類可以創建多個具體產品類的實例。

區別:
工廠方法模式只有一個抽象產品類,而抽象工廠模式有多個。
工廠方法模式的具體工廠類只能創建一個具體產品類的實例,而抽象工廠模式可以創建多個。

⑦ 簡單工廠、工廠方法、抽象工廠有什麼區別

區別
簡單工廠 : 用來生產同一等級結構中的任意產品。(對於增加新的產品,無能為力)
工廠方法 :用來生產同一等級結構中的固定產品。(支持增加任意產品)
抽象工廠 :用來生產不同產品族的全部產品。(對於增加新的產品,無能為力;支持增加產品族)

以上三種工廠 方法在等級結構和產品族這兩個方向上的支持程度不同。所以要根據情況考慮應該使用哪種方法。

⑧ 工廠方法模式與抽象工廠模式的區別

而抽象工廠模式有多個:一個抽象產品類,可以派生出多個具體工廠類。 每個具體工廠類可以創建多個具體產品類的實例。 一個抽象工廠類:工廠方法模式只有一個抽象產品類,可以派生出多個具體產品類。抽象工廠模式:多個抽象產品類。 一個抽象工廠類,每個抽象產品類可以派生出多個具體產品類。 區別。 工廠方法模式的具體工廠類只能創建一個具體產品類的實例。 每個具體工廠類只能創建一個具體產品類的實例工廠方法模式,而抽象工廠模式可以創建多個,可以派生出多個具體工廠類

⑨ 工廠模式,簡單工廠模式,抽象工廠模式三者有什麼區別

工廠模式,簡單工廠模式,抽象工廠模式三者區別如下:

1、首先,三者的創建對象是不相同的。

進行創建對象時,「工廠模式」不使用new創建對象,而是使用Factory模式;「簡單工廠模式」則是通過fw模式來建立對象;「抽象工廠模式」使用迭代模式來創建對象。

(9)簡單工廠工廠方法抽象擴展閱讀:

簡單工廠模式優缺點

1、優點:
工廠類含有必要的判斷邏輯,可以決定在什麼時候創建哪一個產品類的實例,客戶端可以免除直接創建產品對象的責任,而僅僅"消費"產品。簡單工廠模式通過這種做法實現了對責任的分割。

當產品有復雜的多層等級結構時,工廠類只有自己,以不變應萬變,就是模式的缺點。因為工廠類集中了所有產品創建邏輯,一旦不能正常工作,整個系統都要受到影響。

2、缺點:
系統擴展困難,一旦添加新產品就不得不修改工廠邏輯,有可能造成工廠邏輯過於復雜,違背了"開放--封閉"原則(OCP)。另外,簡單工廠模式通常使用靜態工廠方法,這使得無法由子類繼承,造成工廠角色無法形成基於繼承的等級結構。

閱讀全文

與簡單工廠工廠方法抽象相關的資料

熱點內容
小型投資者最佳方法 瀏覽:500
國內羅西尼自動手錶如何調試方法 瀏覽:786
裝修支線的連接方法 瀏覽:746
經常愛放屁有什麼方法可以治療嗎 瀏覽:780
浙江應變測量系統方法指南 瀏覽:172
簡單的折紙信封的方法 瀏覽:678
可暖使用方法 瀏覽:444
物理最基本的研究方法 瀏覽:84
雙母音最簡單的方法 瀏覽:79
素麻花的製作方法視頻 瀏覽:564
旅遊失溫的解決方法 瀏覽:343
敲木架陶瓷瓦的安裝方法 瀏覽:315
2連續乘以十個2的簡便方法 瀏覽:904
葯物分析tlc雜質檢查方法 瀏覽:203
java類方法有什麼用 瀏覽:925
6聽筒在哪裡設置方法 瀏覽:965
柳樹種植方法 瀏覽:389
美雄諾龍的檢測方法 瀏覽:267
99乘78的簡便運算方法 瀏覽:966
用點電荷來代替帶電體的研究方法叫微元法 瀏覽:233