Java 深入探究講解抽象工廠模式
解決工廠方法模式的問(wèn)題:一個(gè)具體工廠只能創(chuàng)建一類產(chǎn)品,而實(shí)際過(guò)程中一個(gè)工廠往往需要生成很多的產(chǎn)品,這種可以采用抽象工廠模式。
1. 抽象工廠模式解決
定義:提供一個(gè)創(chuàng)建一系列相關(guān)或者互相依賴對(duì)象的接口,無(wú)需指定他們的具體的類,具體的工廠負(fù)責(zé)實(shí)現(xiàn)具體的產(chǎn)品的實(shí)例。使一個(gè)工廠可以產(chǎn)生多個(gè)產(chǎn)品。
2. 抽象工廠類圖UML

3. 抽象工廠模式的主要角色
抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,包含了多個(gè)創(chuàng)建產(chǎn)品的接口方法,可以創(chuàng)建多個(gè)不同等級(jí)的產(chǎn)品
具體工廠(ConcreteFactory):實(shí)現(xiàn)了抽象工廠定義的方法,完成具體產(chǎn)品的創(chuàng)建
抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述產(chǎn)品的主要特征和性能
具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品的定義的方法,有具體工廠來(lái)創(chuàng)建產(chǎn)品,具體工廠和具體產(chǎn)品一對(duì)多關(guān)系
4. 代碼實(shí)現(xiàn)
抽象工廠方法實(shí)現(xiàn):
public interface AbstractFactory {
public Product1 createProduct1();
public Product2 createProduct2();
}
?
public class ConcreteFactory1 implements AbstractFactory {
@Override
public Product1 createProduct1() {
System.out.println("具體工廠1產(chǎn)生具體產(chǎn)品1...");
return new ConcreteProduct1();
}
?
@Override
public Product2 createProduct2() {
System.out.println("具體工廠1產(chǎn)生具體產(chǎn)品2...");
return new ConcreteProduct2();
}
}
使用步驟:
- 創(chuàng)建抽象產(chǎn)品類,定義產(chǎn)品的公共方法
- 創(chuàng)建具體產(chǎn)品類(實(shí)現(xiàn)抽象產(chǎn)品接口),定義生成的具體產(chǎn)品
- 創(chuàng)建抽象工廠類,定義具體工廠的公共接口,一個(gè)工廠類可以創(chuàng)建不同等級(jí)的產(chǎn)品
- 創(chuàng)建具體工廠類,定義創(chuàng)建對(duì)應(yīng)具體產(chǎn)品實(shí)例的方法
- 調(diào)用方調(diào)用具體的工廠類的方法,從而創(chuàng)建不同具體產(chǎn)品的實(shí)例
5. 抽象工廠方法再探究
解決問(wèn)題:每個(gè)工廠只能創(chuàng)建一類產(chǎn)品,即是工廠方法的缺點(diǎn)
6. 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 可以在工廠類內(nèi)部對(duì)產(chǎn)品中相關(guān)聯(lián)的多級(jí)產(chǎn)品共同管理,而不必專門(mén)引入新的類來(lái)管理
- 抽象工廠增加了程序的可擴(kuò)展性,當(dāng)新增一個(gè)新的產(chǎn)品族時(shí),不需要修改源代碼,滿足開(kāi)閉原則
缺點(diǎn):
- 當(dāng)產(chǎn)品族新增一個(gè)產(chǎn)品類型時(shí),所有的工廠類都需要進(jìn)行修改,增加了系統(tǒng)的抽象性和理解難度
7. 適用示例
王者榮耀中提供了很多的英雄,英雄分為射手、輔助、打野、坦克等職業(yè),不同的職業(yè)對(duì)應(yīng)的技能,屬性不同。聲明坦克、法師、刺客等多個(gè)工廠子類,每個(gè)工廠可以生產(chǎn)相應(yīng)技能的應(yīng)用。
到此這篇關(guān)于Java 例舉講解抽象工廠模式的文章就介紹到這了,更多相關(guān)Java 抽象工廠內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java設(shè)計(jì)模式之抽象工廠模式淺析講解
- Java設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)
- Java工廠模式之簡(jiǎn)單工廠,工廠方法,抽象工廠模式詳解
- Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式
- 深入理解Java設(shè)計(jì)模式之抽象工廠模式
- 詳解Java實(shí)踐之抽象工廠模式
- Java設(shè)計(jì)模式之抽象工廠模式詳解
- Java使用抽象工廠模式實(shí)現(xiàn)的肯德基消費(fèi)案例詳解
- Java創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)
相關(guān)文章
快速解決SpringMVC @RequestBody 用map接收請(qǐng)求參數(shù)的問(wèn)題
今天小編就為大家分享快速解決SpringMVC @RequestBody 用map接收請(qǐng)求參數(shù)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
IDEA集成git和使用步驟的實(shí)現(xiàn)方法
這篇文章主要介紹了IDEA集成git和使用步驟的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
使用Java把文本內(nèi)容轉(zhuǎn)換成網(wǎng)頁(yè)的實(shí)現(xiàn)方法分享
這篇文章主要介紹了使用Java把文本內(nèi)容轉(zhuǎn)換成網(wǎng)頁(yè)的實(shí)現(xiàn)方法分享,利用到了Java中的文件io包,需要的朋友可以參考下2015-11-11
SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié)
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的三種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11
數(shù)組在java中的擴(kuò)容的實(shí)例方法
在本篇文章里小編給大家分享的是一篇關(guān)于數(shù)組在java中的擴(kuò)容的實(shí)例方法內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-01-01
spring boot--從controller到DAO操作
這篇文章主要介紹了spring boot--從controller到DAO操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
springboot整合mybatis的超詳細(xì)過(guò)程(配置模式+注解模式)
這篇文章主要介紹了springboot整合mybatis的詳細(xì)過(guò)程(配置模式+注解模式),這里我使用的是配置模式+注解模式所以需要配置全局文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04

