資源描述:
《抽象工廠模式》由會員上傳分享,免費在線閱讀,更多相關內容在工程資料-天天文庫。
1、【抽象工廠模式應用場景舉例】 寫到抽象工廠模式了,我深知“抽象工廠模式”博文會帶來一點點高潮,因為程序員對工廠模式中的“抽象工廠”都是比較感冒的,而且關注也很多,我就盡量用我所能理解的那么點程度來給大家介紹這個模式,如果有更好的比喻還請網友指正,先感謝了! 設計模式-快餐簡解-【工廠方法模式】介紹了工廠方法的使用,從那個程序中可以看到,奧迪audi車是從audi_car_factory_imple工廠中創(chuàng)建出來的,而大眾3W車是從threeW_car_factory_imple工廠中創(chuàng)建出來的,那么如果這2家汽車生產大廠由總部在北京市,現(xiàn)在發(fā)展到上海,深圳等城市創(chuàng)建生氣汽車的分廠,該怎
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_impl
3、eimplementsIcar_factory{publicIcar_interfacecreate_car(Stringarea_car){if(area_car.equals("北京")){創(chuàng)建一個北京的奧迪汽車}if(area_car.equals("上海")){創(chuàng)建一個上海的奧迪汽車}if(area_car.equals("深圳")){創(chuàng)建一個深圳的奧迪汽車}returncar_audi_imple_ref;}}那么發(fā)現(xiàn)一個問題,不同地域的汽車卻在一個工廠中出現(xiàn),這是不合乎常理的,因為北京奧迪在北京分廠創(chuàng)建,上海奧迪在上海分廠創(chuàng)建,這樣才對。所以如果遇到分“大系”來創(chuàng)建對象的時候,
4、抽象工廠方法是肯定要使用的時候了。這里的大系指的就是從地域上來分。這個例子就應該以“用抽象工廠來定義具體工廠的抽象,而由具體工廠來創(chuàng)建對象”比如在玩“極品飛車”這款游戲,每個地圖處都有造車的工廠,每個造車的工廠都因為有造車的檔次不同而劃分為高級車廠,低級車廠,那么這樣的場景正是應用抽象工廠的好時機,再來理解一下這句話“用抽象工廠來定義具體工廠的抽象,而由具體工廠來創(chuàng)建對象”,用抽象造車工廠來定義具體造車工廠的抽象,而由具體的造車工廠來創(chuàng)建汽車,這就是抽象工廠與工廠方法的不同,工廠方法中對象的創(chuàng)建是由工廠方法來確定的,創(chuàng)建的對象都是不分類并且實現(xiàn)一個接口的,而抽象工廠就是在工廠方法的基礎上對
5、創(chuàng)建車的對象的行為進行分類,比如北【抽象工廠模式解釋】類型:創(chuàng)建模式提供一個創(chuàng)建一系列相關或相互依賴對象的接口,而無需指定他們具體的類?!境橄蠊S模式UML圖】京車廠,上海車廠等?!境橄蠊S模式-JAVA代碼實現(xiàn)】新建抽象工廠接口:packagecar_factory_interface;importcar_interface.Icar_interface;publicinterfaceIcar_factory{publicIcar_interfacecreate_threeW_car();publicIcar_interfacecreate_audi_car();}新建抽象工廠接口的高級
6、車adv工廠實現(xiàn)類: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
7、_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_im