Java設(shè)計模式之抽象工廠模式實例詳解
本文實例講述了Java設(shè)計模式之抽象工廠模式。分享給大家供大家參考,具體如下:
具體工廠類:生產(chǎn)創(chuàng)建某一類具體產(chǎn)品對象。
抽象產(chǎn)品類可以使用接口或者父類來描述產(chǎn)品對象的行為特征。
具體產(chǎn)品類就是某一具體的對象。
那么抽象工廠模式和工廠模式的不同之處呢?
其實最大的不同就在于,在產(chǎn)品類的結(jié)構(gòu)更加復(fù)雜時,抽象工廠模式針對不同的產(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)品族各自設(shè)計一個創(chuàng)建方法。
而具體到某一個工廠,它都會生產(chǎn)這兩種產(chǎn)品,這兩種產(chǎn)品橫向比較其實還有共同點,那就是某一時間段的蘋果工廠生產(chǎn)的型號是有規(guī)律的,所以2011年的工廠就不會產(chǎn)生iphone5這個產(chǎn)品對象(因為那時候還沒有iphone5)
和工廠模式比,抽象工廠模式其實更加復(fù)雜化了,當(dāng)產(chǎn)品族只有一個時,自然而然就退化到使用工廠模式了。
設(shè)計模式:

抽象工廠類 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相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
- Java創(chuàng)建型設(shè)計模式之抽象工廠模式(Abstract?Factory)
- Java設(shè)計模式之抽象工廠模式淺析講解
- Java設(shè)計模式之抽象工廠模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設(shè)計模式之抽象工廠模式
- 深入理解Java設(shè)計模式之抽象工廠模式
- Java設(shè)計模式之簡單工廠 工廠方法 抽象工廠深度總結(jié)
- Java設(shè)計模式之抽象工廠模式詳解
- Java設(shè)計模式之工廠模式分析【簡單工廠、工廠方法、抽象工廠】
- Java設(shè)計模式之抽象工廠模式
- Java設(shè)計模式筆記之抽象工廠代碼示例
- Java設(shè)計模式編程中簡單工廠與抽象工廠模式的使用實例
- Java設(shè)計模式編程中的工廠方法模式和抽象工廠模式
- Java設(shè)計模式之工廠方法和抽象工廠
相關(guān)文章
如何用Java?幾分鐘處理完?30?億個數(shù)據(jù)(項目難題)
現(xiàn)有一個 10G 文件的數(shù)據(jù),里面包含了 18-70 之間的整數(shù),分別表示 18-70 歲的人群數(shù)量統(tǒng)計,今天小編通過本文給大家講解如何用Java?幾分鐘處理完?30?億個數(shù)據(jù),這個問題一直以來是項目難題,今天通過本文給大家詳細(xì)介紹下,感興趣的朋友一起看看吧2022-07-07
RabbitMQ消息隊列中多路復(fù)用Channel信道詳解
這篇文章主要介紹了RabbitMQ消息隊列中多路復(fù)用Channel信道詳解,消息Message是指在應(yīng)用間傳送的數(shù)據(jù),消息可以非常簡單,比如只包含文本字符串,也可以更復(fù)雜,可能包含嵌入對象,需要的朋友可以參考下2023-08-08
淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題
本篇文章主要介紹了淺談利用Spring的AbstractRoutingDataSource解決多數(shù)據(jù)源的問題,具有一定的參考價值,有需要的可以了解一下2017-08-08
Springboot如何獲取yml、properties參數(shù)
這篇文章主要介紹了Springboot如何獲取yml、properties參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
Java中的有限狀態(tài)機(設(shè)計模式——狀態(tài)模式)
這篇文章主要介紹了Java中的有限狀態(tài)機(設(shè)計模式——狀態(tài)模式),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08
使用Spring注解@EventListener實現(xiàn)監(jiān)聽原理
這篇文章主要介紹了使用Spring注解@EventListener實現(xiàn)監(jiān)聽原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

