Java設(shè)計(jì)模式之抽象工廠模式實(shí)例詳解
本文實(shí)例講述了Java設(shè)計(jì)模式之抽象工廠模式。分享給大家供大家參考,具體如下:
具體工廠類:生產(chǎn)創(chuàng)建某一類具體產(chǎn)品對(duì)象。
抽象產(chǎn)品類可以使用接口或者父類來(lái)描述產(chǎn)品對(duì)象的行為特征。
具體產(chǎn)品類就是某一具體的對(duì)象。
那么抽象工廠模式和工廠模式的不同之處呢?
其實(shí)最大的不同就在于,在產(chǎn)品類的結(jié)構(gòu)更加復(fù)雜時(shí),抽象工廠模式針對(duì)不同的產(chǎn)品族(就是一類產(chǎn)品對(duì)象)定義了不同的行為,也就是在父類或接口中,定義了不同的產(chǎn)生方法。不同的產(chǎn)品族調(diào)用各自的創(chuàng)建方法。同時(shí)不同的產(chǎn)品族橫向比較,也有可歸類的相同特征,這些特征就具體到某一個(gè)工廠中體現(xiàn)了。
例如蘋果公司生產(chǎn)手機(jī)和平板電腦。
這明顯是2個(gè)不同的產(chǎn)品族。手機(jī)和平板電腦就不是同一類產(chǎn)品。所以在工廠中定義工廠的行為時(shí),就需要為這兩種產(chǎn)品族各自設(shè)計(jì)一個(gè)創(chuàng)建方法。
而具體到某一個(gè)工廠,它都會(huì)生產(chǎn)這兩種產(chǎn)品,這兩種產(chǎn)品橫向比較其實(shí)還有共同點(diǎn),那就是某一時(shí)間段的蘋果工廠生產(chǎn)的型號(hào)是有規(guī)律的,所以2011年的工廠就不會(huì)產(chǎn)生iphone5這個(gè)產(chǎn)品對(duì)象(因?yàn)槟菚r(shí)候還沒(méi)有iphone5)
和工廠模式比,抽象工廠模式其實(shí)更加復(fù)雜化了,當(dāng)產(chǎn)品族只有一個(gè)時(shí),自然而然就退化到使用工廠模式了。
設(shè)計(jì)模式:
抽象工廠類 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."); } }
測(cè)試:
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相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)
- Java設(shè)計(jì)模式之抽象工廠模式淺析講解
- Java設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式
- 深入理解Java設(shè)計(jì)模式之抽象工廠模式
- Java設(shè)計(jì)模式之簡(jiǎn)單工廠 工廠方法 抽象工廠深度總結(jié)
- Java設(shè)計(jì)模式之抽象工廠模式詳解
- Java設(shè)計(jì)模式之工廠模式分析【簡(jiǎn)單工廠、工廠方法、抽象工廠】
- Java設(shè)計(jì)模式之抽象工廠模式
- Java設(shè)計(jì)模式筆記之抽象工廠代碼示例
- Java設(shè)計(jì)模式編程中簡(jiǎn)單工廠與抽象工廠模式的使用實(shí)例
- Java設(shè)計(jì)模式編程中的工廠方法模式和抽象工廠模式
- Java設(shè)計(jì)模式之工廠方法和抽象工廠
相關(guān)文章
如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù)(項(xiàng)目難題)
現(xiàn)有一個(gè) 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計(jì),今天小編通過(guò)本文給大家講解如何用Java?幾分鐘處理完?30?億個(gè)數(shù)據(jù),這個(gè)問(wèn)題一直以來(lái)是項(xiàng)目難題,今天通過(guò)本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧2022-07-07RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解
這篇文章主要介紹了RabbitMQ消息隊(duì)列中多路復(fù)用Channel信道詳解,消息Message是指在應(yīng)用間傳送的數(shù)據(jù),消息可以非常簡(jiǎn)單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對(duì)象,需要的朋友可以參考下2023-08-08淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題
本篇文章主要介紹了淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問(wèn)題,具有一定的參考價(jià)值,有需要的可以了解一下2017-08-08Springboot如何獲取yml、properties參數(shù)
這篇文章主要介紹了Springboot如何獲取yml、properties參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Java中的有限狀態(tài)機(jī)(設(shè)計(jì)模式——狀態(tài)模式)
這篇文章主要介紹了Java中的有限狀態(tài)機(jī)(設(shè)計(jì)模式——狀態(tài)模式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08SpringMVC?bean加載控制的實(shí)現(xiàn)分析
SpringMVC是一種基于Java,實(shí)現(xiàn)了Web?MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦。基于請(qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開(kāi)發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開(kāi)發(fā)2023-02-02使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理
這篇文章主要介紹了使用Spring注解@EventListener實(shí)現(xiàn)監(jiān)聽(tīng)原理,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08