Java設計模式之抽象工廠模式實例詳解
本文實例講述了Java設計模式之抽象工廠模式。分享給大家供大家參考,具體如下:
具體工廠類:生產(chǎn)創(chuàng)建某一類具體產(chǎn)品對象。
抽象產(chǎn)品類可以使用接口或者父類來描述產(chǎn)品對象的行為特征。
具體產(chǎn)品類就是某一具體的對象。
那么抽象工廠模式和工廠模式的不同之處呢?
其實最大的不同就在于,在產(chǎn)品類的結構更加復雜時,抽象工廠模式針對不同的產(chǎn)品族(就是一類產(chǎn)品對象)定義了不同的行為,也就是在父類或接口中,定義了不同的產(chǎn)生方法。不同的產(chǎn)品族調(diào)用各自的創(chuàng)建方法。同時不同的產(chǎn)品族橫向比較,也有可歸類的相同特征,這些特征就具體到某一個工廠中體現(xiàn)了。
例如蘋果公司生產(chǎn)手機和平板電腦。
這明顯是2個不同的產(chǎn)品族。手機和平板電腦就不是同一類產(chǎn)品。所以在工廠中定義工廠的行為時,就需要為這兩種產(chǎn)品族各自設計一個創(chuàng)建方法。
而具體到某一個工廠,它都會生產(chǎn)這兩種產(chǎn)品,這兩種產(chǎn)品橫向比較其實還有共同點,那就是某一時間段的蘋果工廠生產(chǎn)的型號是有規(guī)律的,所以2011年的工廠就不會產(chǎn)生iphone5這個產(chǎn)品對象(因為那時候還沒有iphone5)
和工廠模式比,抽象工廠模式其實更加復雜化了,當產(chǎn)品族只有一個時,自然而然就退化到使用工廠模式了。
設計模式:
抽象工廠類 IAppleFactroy
package org.test.design.abf; /** * * @author lushuaiyin * */ public interface IAppleFactroy { IComputer createComputer(); IMobile createMobile(); }
具體工廠類 AppleFactoryIn2011 AppleFactoryIn2012
package org.test.design.abf; /** * * @author lushuaiyin * */ public class AppleFactoryIn2011 implements IAppleFactroy{ public IComputer createComputer() { return new Pad3(); } public IMobile createMobile() { return new Phone4s(); } }
package org.test.design.abf; /** * * @author lushuaiyin * */ public class AppleFactoryIn2012 implements IAppleFactroy{ public IComputer createComputer() { return new PadMini(); } public IMobile createMobile() { return new Phone5(); } }
抽象產(chǎn)品類 IMobile IComputer
package org.test.design.abf; public interface IMobile { void call(); }
package org.test.design.abf; public interface IComputer { void play(); }
具體產(chǎn)品類 Pad3 PadMini Phone4s Phone5
package org.test.design.abf; public class Pad3 implements IComputer{ public void play() { System.out.println("I am iPad3."); } }
package org.test.design.abf; public class PadMini implements IComputer{ public void play() { System.out.println("I am iPad Mini."); } }
package org.test.design.abf; public class Phone4s implements IMobile { public void call() { System.out.println("I am IPhone 4s."); } }
package org.test.design.abf; public class Phone5 implements IMobile { public void call() { System.out.println("I am IPhone 5."); } }
測試:
package org.test.design.abf; public class TestMain { /** * @param args */ public static void main(String[] args) { IAppleFactroy factory2011=new AppleFactoryIn2011(); IComputer ipad3=factory2011.createComputer(); ipad3.play(); IMobile iphone4s=factory2011.createMobile(); iphone4s.call(); IAppleFactroy factory2012=new AppleFactoryIn2012(); IComputer ipad_mini=factory2012.createComputer(); ipad_mini.play(); IMobile iphone5=factory2012.createMobile(); iphone5.call(); } } /*打印 I am iPad3. I am IPhone 4s. I am iPad Mini. I am IPhone 5. **/
更多java相關內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
- Java創(chuàng)建型設計模式之抽象工廠模式(Abstract?Factory)
- Java設計模式之抽象工廠模式淺析講解
- Java設計模式之抽象工廠模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設計模式之抽象工廠模式
- 深入理解Java設計模式之抽象工廠模式
- Java設計模式之簡單工廠 工廠方法 抽象工廠深度總結
- Java設計模式之抽象工廠模式詳解
- Java設計模式之工廠模式分析【簡單工廠、工廠方法、抽象工廠】
- Java設計模式之抽象工廠模式
- Java設計模式筆記之抽象工廠代碼示例
- Java設計模式編程中簡單工廠與抽象工廠模式的使用實例
- Java設計模式編程中的工廠方法模式和抽象工廠模式
- Java設計模式之工廠方法和抽象工廠
相關文章
如何用Java?幾分鐘處理完?30?億個數(shù)據(jù)(項目難題)
現(xiàn)有一個 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計,今天小編通過本文給大家講解如何用Java?幾分鐘處理完?30?億個數(shù)據(jù),這個問題一直以來是項目難題,今天通過本文給大家詳細介紹下,感興趣的朋友一起看看吧2022-07-07淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題
本篇文章主要介紹了淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題,具有一定的參考價值,有需要的可以了解一下2017-08-08Springboot如何獲取yml、properties參數(shù)
這篇文章主要介紹了Springboot如何獲取yml、properties參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03Java中的有限狀態(tài)機(設計模式——狀態(tài)模式)
這篇文章主要介紹了Java中的有限狀態(tài)機(設計模式——狀態(tài)模式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08使用Spring注解@EventListener實現(xiàn)監(jiān)聽原理
這篇文章主要介紹了使用Spring注解@EventListener實現(xiàn)監(jiān)聽原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08