




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第5章工廠方法方式劉 偉weiliu_chinayahoo本章教學內容工廠方法方式 方式動機與定義 方式構造與分析 方式實例與解析 方式效果與運用 方式擴展工廠方法方式簡單工廠方式的缺乏在簡單工廠方式中,只提供了一個工廠類,該工廠類處于對產品類進展實例化的中心位置,它知道每一個產品對象的創建細節,并決議何時實例化哪一個產品類。簡單工廠方式最大的缺陷是當有新產品要參與到系統中時,必需修正工廠類,參與必要的處置邏輯,這違背了“開閉原那么。在簡單工廠方式中,一切的產品都是由同一個工廠創建,工廠類職責較重,業務邏輯較為復雜,詳細產品與工廠類之間的耦合度高,嚴重影響了系統的靈敏性和擴展性,而工廠方法方式
2、那么可以很好地處理這一問題。工廠方法方式方式動機思索這樣一個系統,按鈕工廠類可以前往一個詳細的按鈕實例,如圓形按鈕、矩形按鈕、菱形按鈕等。在這個系統中,假設需求添加一種新類型的按鈕,如橢圓形按鈕,那么除了添加一個新的詳細產品類之外,還需求修正工廠類的代碼,這就使得整個設計在一定程度上違反了“開閉原那么。 工廠方法方式方式動機如今對該系統進展修正,不再設計一個按鈕工廠類來一致擔任一切產品的創建,而是將詳細按鈕的創建過程交給專門的工廠子類去完成,我們先定義一個籠統的按鈕工廠類,再定義詳細的工廠類來生成圓形按鈕、矩形按鈕、菱形按鈕等,它們實如今籠統按鈕工廠類中定義的方法。這種籠統化的結果使這種構造可
3、以在不修正詳細工廠類的情況下引進新的產品,假設出現新的按鈕類型,只需求為這種新類型的按鈕創建一個詳細的工廠類就可以獲得該新按鈕的實例,這一特點無疑使得工廠方法方式具有超越簡單工廠方式的優越性,更加符合“開閉原那么。工廠方法方式方式動機運用工廠方法方式設計的按鈕工廠工廠方法方式方式定義工廠方法方式(Factory Method Pattern)又稱為工廠方式,也叫虛擬構造器(Virtual Constructor)方式或者多態工廠(Polymorphic Factory)方式,它屬于類創建型方式。在工廠方法方式中,工廠父類擔任定義創建產品對象的公共接口,而工廠子類那么擔任生成詳細的產品對象,這樣
4、做的目的是將產品類的實例化操作延遲到工廠子類中完成,即經過工廠子類來確定終究應該實例化哪一個詳細產品類。工廠方法方式方式定義Factory Method Pattern: Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses. Frequency of use: high 工廠方法方式方式構造工廠方法方式方式構造工廠方法方式包含如下
5、角色:Product:籠統產品ConcreteProduct:詳細產品Factory:籠統工廠ConcreteFactory:詳細工廠工廠方法方式方式分析工廠方法方式是簡單工廠方式的進一步籠統和推行。由于運用了面向對象的多態性,工廠方法方式堅持了簡單工廠方式的優點,而且抑制了它的缺陷。在工廠方法方式中,中心的工廠類不再擔任一切產品的創建,而是將詳細創建任務交給子類去做。這個中心類僅僅擔任給出詳細工廠必需實現的接口,而不擔任哪一個產品類被實例化這種細節,這使得工廠方法方式可以允許系統在不修正工廠角色的情況下引進新產品。 工廠方法方式方式分析當系統擴展需求添加新的產品對象時,僅僅需求添加一個詳細產
6、品對象以及一個詳細工廠對象,原有工廠對象不需求進展任何修正,也不需求修正客戶端,很好地符合了“開閉原那么。而簡單工廠方式在添加新產品對象后不得不修正工廠方法,擴展性不好。工廠方法方式退化后可以演化成簡單工廠方式。工廠方法方式方式分析籠統工廠類代碼:public abstract class PayMethodFactory public abstract AbstractPay getPayMethod();籠統工廠類工廠方法方式方式分析詳細工廠類代碼:public class CashPayFactory extends PayMethodFactory public AbstractPay
7、 getPayMethod() return new CashPay(); 詳細工廠類工廠方法方式方式分析客戶類代碼片段:為了提高系統的可擴展性和靈敏性,在定義工廠和產品時都必需運用籠統層,假設需求改換產品類,只需求改換對應的工廠即可,其他代碼不需求進展任何修正。 PayMethodFactory factory;AbstractPay payMethod;factory=new CashPayFactory();payMethod =factory.getPayMethod();payMethod.pay(); 工廠方法方式方式分析配置文件代碼:在實踐的運用開發中,普通將詳細工廠類的實例化過
8、程進展改良,不直接運用new關鍵字來創建對象,而是將詳細類的類名寫入配置文件中,再經過Java的反射機制,讀取XML格式的配置文件,根據存儲在XML文件中的類名字符串生成對象。 CashPayFactory 工廠方法方式方式分析Java反射(Java Reflection):是指在程序運轉時獲取知稱號的類或已有對象的相關信息的一種機制,包括類的方法、屬性、超類等信息,還包括實例的創建和實例類型的判別等。可經過Class類的forName()方法前往與帶有給定字符串名的類或接口相關聯的Class對象,再經過newInstance()方法創建此對象所表示的類的一個新實例,即經過一個類名字符串得到類
9、的實例。 /創建一個字符串類型的對象Class c = Class.forName(“String”);Object obj = c.newInstance();return obj;工廠方法方式方式分析工具類XMLUtil代碼片段:/創建DOM文檔對象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File(conf
10、ig.xml); /獲取包含類名的文本節點 NodeList nl = doc.getElementsByTagName(className); Node classNode=nl.item(0).getFirstChild(); String cName=classNode.getNodeValue(); /通過類名生成實例對象并將其返回 Class c=Class.forName(cName);Object obj=c.newInstance(); return obj;工廠方法方式方式分析修正后的客戶類代碼片段:PayMethodFactory factory;AbstractPay p
11、ayMethod;factory=(PayMethodFactory)XMLUtil.getBean(); /getBean()的返回類型為Object,此處需要進行強制類型轉換payMethod =factory.getPayMethod();payMethod.pay(); 工廠方法方式方式實例與解析實例一:電視機工廠將原有的工廠進展分割,為每種品牌的電視機提供一個子工廠,海爾工廠專門擔任消費海爾電視機,海信工廠專門擔任消費海信電視機,假設需求消費TCL電視機或創維電視機,只需求對應添加一個新的TCL工廠或創維工廠即可,原有的工廠無須做任何修正,使得整個系統具有更加的靈敏性和可擴展性。 工
12、廠方法方式方式實例與解析實例一:電視機工廠工廠方法方式方式實例與解析實例一:電視機工廠參考代碼(Chapter 05 Factory Methodsample01)演示工廠方法方式方式實例與解析實例二:日志記錄器某系統日志記錄器要求支持多種日志記錄方式,如文件記錄、數據庫記錄等,且用戶可以根據要求動態選擇日志記錄方式,現運用工廠方法方式設計該系統。工廠方法方式方式實例與解析實例二:日志記錄器工廠方法方式方式優缺陷工廠方法方式的優點在工廠方法方式中,工廠方法用來創建客戶所需求的產品,同時還向客戶隱藏了哪種詳細產品類將被實例化這一細節,用戶只需求關懷所需產品對應的工廠,無須關懷創建細節,甚至無須知
13、道詳細產品類的類名。基于工廠角色和產品角色的多態性設計是工廠方法方式的關鍵。它可以使工廠可以自主確定創建何種產品對象,而如何創建這個對象的細節那么完全封裝在詳細工廠內部。工廠方法方式之所以又被稱為多態工廠方式,是由于一切的詳細工廠類都具有同一籠統父類。運用工廠方法方式的另一個優點是在系統中參與新產品時,無須修正籠統工廠和籠統產品提供的接口,無須修正客戶端,也無須修正其他的詳細工廠和詳細產品,而只需添加一個詳細工廠和詳細產品就可以了。這樣,系統的可擴展性也就變得非常好,完全符合“開閉原那么。工廠方法方式方式優缺陷工廠方法方式的缺陷在添加新產品時,需求編寫新的詳細產品類,而且還要提供與之對應的詳細
14、工廠類,系統中類的個數將成對添加,在一定程度上添加了系統的復雜度,有更多的類需求編譯和運轉,會給系統帶來一些額外的開銷。由于思索到系統的可擴展性,需求引入籠統層,在客戶端代碼中均運用籠統層進展定義,添加了系統的籠統性和了解難度,且在實現時能夠需求用到DOM、反射等技術,添加了系統的實現難度。工廠方法方式方式適用環境在以下情況下可以運用工廠方法方式:一個類不知道它所需求的對象的類:在工廠方法方式中,客戶端不需求知道詳細產品類的類名,只需求知道所對應的工廠即可,詳細的產品對象由詳細工廠類創建;客戶端需求知道創建詳細產品的工廠類。一個類經過其子類來指定創建哪個對象:在工廠方法方式中,對于籠統工廠類只
15、需求提供一個創建產品的接口,而由其子類來確定詳細要創建的對象,利用面向對象的多態性和里氏代換原那么,在程序運轉時,子類對象將覆蓋父類對象,從而使得系統更容易擴展。將創建對象的義務委托給多個工廠子類中的某一個,客戶端在運用時可以無須關懷是哪一個工廠子類創建產品子類,需求時再動態指定,可將詳細工廠類的類名存儲在配置文件或數據庫中。工廠方法方式方式運用(1) java.util.Collection接口的iterator()方法: 工廠方法方式方式運用(2) Java音訊效力JMS(Java Messaging Service) :/使用上下文和JNDI得到連接工廠的引用,ctx是上下文Contex
16、t類型的對象QueueConnectionFactory qConnFact=(QueueConnectionFactory)ctx.lookup(cfJndi);/使用連接工廠創建一個連接QueueConnection qConn=qConnFact.createQueueConnection();/使用連接創建一個會話QueueSession qSess=qConn.createQueueSession(false,javax.jms.QueueSession. AUTO_ACKNOWLEDGE);/使用上下文和JNDI得到消息隊列的引用Queue q=(Queue)ctx.lookup(
17、myQueue);/使用連接創建一個需要發送的消息類型的實例QueueSender qSend=qSess.createSender(q);System.out.println(開始發送消息.); 工廠方法方式方式運用(3) JDBC中的工廠方法:Connection conn=DriverManager.getConnection(jdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=DB;user=sa;password=);Statement statement=conn.createStatement();ResultSet rs
18、=statement.executeQuery(select * from UserInfo);工廠方法方式方式擴展運用多個工廠方法:在籠統工廠角色中可以定義多個工廠方法,從而使詳細工廠角色實現這些不同的工廠方法,這些方法可以包含不同的業務邏輯,以滿足對不同的產品對象的需求。產品對象的反復運用:工廠對象將曾經創建過的產品保管到一個集合如數組、List等中,然后根據客戶對產品的懇求,對集合進展查詢。假設有滿足要求的產品對象,就直接將該產品前往客戶端;假設集合中沒有這樣的產品對象,那么就創建一個新的滿足要求的產品對象,然后將這個對象在添加到集合中,再前往給客戶端。 多態性的喪失和方式的退化:假設工廠僅僅前往一個詳細產品對象,便違背了工廠方法的意圖,發生退化,此時就不再是工廠方法方式了。普通來說,工廠對象該當有一個籠統的父類型,假設工廠等級構造中只需一個詳細工廠類的話,籠統工廠就可以省略,也將發生了退化。當只需一個詳細工廠,在詳細工廠中可以創建一切的產品對象,并且工廠方法設計為靜態方法時,工廠方法方式就退化成簡單工廠方式。 本章小結工廠方法方式又稱為工廠方式,它屬于類創建型方式。在工廠方法方式中,工廠父類擔任定義創建產品對象的公共接口,而工廠子類那么擔任生成詳細的產品對象,這樣做的目的是將產品類的實例化操作延遲到工廠子類中完成,即經過工廠子類來確定終究應該實例化哪一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 礦石浮選工藝優化-石墨滑石選礦考核試卷
- 畜禽繁殖力與遺傳改良研究考核試卷
- 紡織材料與纖維的研究與發展考核試卷
- 電腦系統優化與提速技巧考核試卷
- 筆的制造生產計劃編制與執行考核試卷
- 嘉興南湖學院《Python數據分析與應用》2023-2024學年第二學期期末試卷
- 昆明理工大學津橋學院《CAD制圖》2023-2024學年第二學期期末試卷
- 咸陽市2025年三年級數學第二學期期末學業水平測試試題含解析
- 日照職業技術學院《國際商務創業策劃案例分析》2023-2024學年第二學期期末試卷
- 寧德市周寧縣2024-2025學年數學四年級第二學期期末考試試題含解析
- 大部分分校:地域文化形考任務三-國開(CQ)-國開期末復習資料
- 《生物冶金》課程教學大綱
- DB22-T 5118-2022 建筑工程資料管理標準
- 工程地質測繪ppt版(共61頁)
- 水文地質與工程地質勘察工程地質測繪PPT
- 崩塌易發程度數量化評分表
- 年產10000噸耐高溫α-淀粉酶發酵車間設計
- 機組黑啟動方案
- 平衡計分卡及戰略地圖
- 《觀潮》學歷案案例
- 附件:湖北省重點水利水電工程施工招標投標評分標準-鄂水
評論
0/150
提交評論