




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
設計模式-快餐簡解-【抽象工廠模式】臺_d佚名_j2008-11-13【抽象工廠模式應用場景舉例】寫到抽象工廠模式了,我深知“抽象工廠模式”博文會帶來一點點高潮,因為程序員對工廠模式中的“抽象工廠”都是比較感冒的,而且關注也很多,我就盡量用我所能理解的那么點程度來給大家介紹這個模式,如果有更好的比喻還請網友指正,先感謝了!設計模式-快餐簡解-【工廠方法模式】介紹了工廠方法的使用,從那個程序中可以看到,奧迪audi車是從audi_car_factory_imple工廠中創建出來的,而大眾3W車是從threeW_car_factory_imple工廠中創建出來的,那么如果這2家汽車生產大廠由總部在北京市,現在發展到上海,深圳等城市創建生氣汽車的分廠,該怎么辦?是不是得將原來的奧迪汽車工廠類:publicclassaudi_car_factory_impleimplementsIcar_factory{publicIcar_interfacecreate_car(){car_audi_implecar_audi_imple_ref=newcar_audi_imple();car_audi_imple_ref.setName("奧迪A6");car_audi_imple_ref.setSpeed(300);returncar_audi_imple_ref;}}改成類似如下的模樣:publicclassaudi_car_factory_impleimplementsIcar_factory{publicIcar_interfacecreate_car(Stringarea_car){if(area_car.equals("北京")){創建一個北京的奧迪汽車}if(area_car.equals("上海")){創建一個上海的奧迪汽車}if(area_car.equals("深圳")){創建一個深圳的奧迪汽車}returncar_audi_imple_ref;}}那么發現一個問題,不同地域的汽車卻在一個工廠中出現,這是不合乎常理的,因為北京奧迪在北京分廠創建,上海奧迪在上海分廠創建,這樣才對。
所以如果遇到分“大系”來創建對象的時候,抽象工廠方法是肯定要使用的時候了。這里的大系指的就是從地域上來分。這個例子就應該以“用抽象工廠來定義具體工廠的抽象,而由具體工廠來創建對象”比如在玩“極品飛車”這款游戲,每個地圖處都有造車的工廠,每個造車的工廠都因為有造車的檔次不同而劃分為高級車廠,低級車廠,那么這樣的場景正是應用抽象工廠的好時機,再來理解一下這句話“用抽象工廠來定義具體工廠的抽象,而由具體工廠來創建對象”,用抽象造車工廠來定義具體造車工廠的抽象,而由具體的造車工廠來創建汽車,這就是抽象工廠與工廠方法的不同,工廠方法中對象的創建是由工廠方法來確定的,創建的對象都是不分類并且實現一個接口的,而抽象工廠就是在工廠方法的基礎上對創建車的對象的行為進行分類,比如北京車廠,上海車廠等。【抽象工廠模式解釋】類型:創建模式提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類。【抽象工廠模式UML圖】【抽象工廠模式-JAVA代碼實現】新建抽象工廠接口:packagecar_factory_interface;importcar_interface.Icar_interface;publicinterfaceIcar_factory{publicIcar_interfacecreate_threeW_car();publicIcar_interfacecreate_audi_car();}
新建抽象工廠接口的高級車adv工廠實現類:packagecar_factory_imple;importcar_factory_interface.Icar_factory;importcar_imple.car_3w_imple_adv;importcar_imple.car_audi_imple_adv;importcar_interface.Icar_interface;publicclasscar_factory_advimplementsIcar_factory{publicIcar_interfacecreate_audi_car(){car_audi_imple_advcar_audi_imple_adv=newcar_audi_imple_adv();car_audi_imple_adv.setName("奧迪A6");car_audi_imple_adv.setSpeed(300);returncar_audi_imple_adv;}publicIcar_interfacecreate_threeW_car(){car_3w_imple_advcar_3w_imple_adv_ref=newcar_3w_imple_adv();car_3w_imple_adv_ref.setName("大眾A6");car_3w_imple_adv_ref.setSpeed(300);returncar_3w_imple_adv_ref;}}新建抽象工廠接口的普通車low工廠實現類:packagecar_factory_imple;importcar_factory_interface.Icar_factory;importcar_imple.car_3w_imple_low;importcar_imple.car_audi_imple_low;importcar_interface.Icar_interface;publicclasscar_factory_lowimplementsIcar_factory{publicIcar_interfacecreate_audi_car(){car_audi_imple_lowcar_audi_imple_low_ref=newcar_audi_imple_low();car_audi_imple_low_ref.setName("奧迪A6");car_audi_imple_low_ref.setSpeed(300);returncar_audi_imple_low_ref;}
publicIcar_interfacecreate_threeW_car(){car_3w_imple_lowcar_3w_imple_low_ref=newcar_3w_imple_low();car_3w_imple_low_ref.setName("大眾A6");car_3w_imple_low_ref.setSpeed(300);returncar_3w_imple_low_ref;}}上面已經有抽象工廠和具體工廠的實現類了。新建汽車接口:packagecar_interface;publicinterfaceIcar_interface{publicvoidstart();publicvoidstop();}新建汽車父類:packagecar_imple;importcar_interface.Icar_interface;publicclassbase_car_impleimplementsIcar_interface{privateintspeed;privateStringname;publicintgetSpeed(){returnspeed;}publicvoidsetSpeed(intspeed){this.speed=speed;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){
=name;{,//TODO…dmethodstubpublicvoidstop(){}}TODO…i新建大眾高級車:packagecar_imple;importcar_interface.Icar_interface;publicclasscar_3w_imple_advextendsbase_car_imple{publicvoidstart(){System.out.println("富華版:"+this.getName()+"車以專利技術起動了最高速度為:"+this.getSpeed());}publicvoidstop(){System.out.println("富華版:"+this.getName()+"車以專利技術停車了");}}新建大眾普通車:packagecar_imple;importcar_interface.Icar_interface;publicclasscar_3w_imple_lowextendsbase_car_imple{publicvoidstart(){System.out.println("普通版:"+this.getName()+"車以專利技術起動了最高速度為:"+this.getSpeed());}publicvoidstop(){
System.out.println("普通版:"+this.getName()+"車以專利技術停車了");}}新建大眾普通車:packagecar_imple;importcar_interface.Icar_interface;publicclasscar_audi_imple_advextendsbase_car_imple{publicvoidstart(){System.out.println("富華版:"+this.getName()+"車以專利技術起動了最高速度為:"+this.getSpeed());}publicvoidstop(){System.out.println("富華版:"+this.getName()+"車以專利技術停車了");}}新建奧迪普通車:packagecar_imple;importcar_interface.Icar_interface;publicclasscar_audi_imple_lowextendsbase_car_imple{publicvoidstart(){System.out.println("普通版:"+this.getName()+"車以專利技術起動了最高速度為:"+this.getSpeed());}publicvoidstop(){System.out.println("普通版:"+this.getName()+"車以專利技術停車了");}}新建客戶端運行類:packagerun_main;
importcar_factory_imple.car_factory_adv;importcar_factory_interface.Icar_factory;importcar_interface.Icar_interface;publicclassrun_main{publicstaticvoidmain(String[]args){Icar_factoryIcar_factory_ref=newcar_factory_adv();Icar_interfaceIcar_interface_ref=Icar_factory_ref.create_threeW_car();Icar_interface_ref.start();Icar_interface_ref.stop();}}程序運行結果如下:富華版:大眾A6車以專利技術起動了最高速度為:300富華版:大眾A6車以專利技術停車了抓一篇閻宏的小文字:一開始只在后花園中種蔬菜類的時候可以用簡單工廠模式,由工廠負責生成具體的蔬菜類,但是如果后花園要引進水果類
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年應急管理與災害響應考試試卷及答案總結
- 2025年新工藝材料技術的研究與應用試題及答案
- 2025年信息安全與風險管理課程考核試卷及答案
- 2025年汽車服務工程職業能力測試試卷及答案
- 2025年批判性思維能力測試題及答案
- 2025年建筑師執業資格考試試卷及答案
- 2025年5G通信技術與網絡的性能優化的綜合能力考試卷及答案
- 2025年電子商務技能證書考試試題及答案
- 物資采購出庫管理制度
- 特困補助資金管理制度
- 水輪機智慧樹知到期末考試答案2024年
- 燃燒脂肪-流行健身舞蹈智慧樹知到期末考試答案2024年
- 2024年山東省濟南市市中區中考二模地理試卷
- (高清版)DZT 0270-2014 地下水監測井建設規范
- 2024中國中車總部招聘筆試參考題庫附帶答案詳解
- 電網防高墜安全教育
- 壓鑄模具熱處理
- 20221011鋰電池行業數字化轉型MES整體解決方案
- TDT 1070.1-2022 礦山生態修復技術規范 第1部分:通則
- 高校學科建設與發展規劃
- 2024年大學試題(教育學)-教育學原理歷年考試高頻考點試題附帶答案
評論
0/150
提交評論