Java中常用的設(shè)計(jì)模式之工廠模式詳解
優(yōu)點(diǎn)
1.一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道其名稱就可以了。
2.擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠類就可以。
3.屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。
缺點(diǎn)
1.每次增加一個(gè)產(chǎn)品時(shí),都需要增加一個(gè)具體類和對(duì)象實(shí)現(xiàn)工廠,使得系統(tǒng)中類的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類的依賴。這并不是什么好事。
使用場(chǎng)景
1.日志記錄器:記錄可能記錄到本地硬盤(pán)、系統(tǒng)事件、遠(yuǎn)程服務(wù)器等,用戶可以選擇記錄日志到什么地方。
2.數(shù)據(jù)庫(kù)訪問(wèn),當(dāng)用戶不知道最后系統(tǒng)采用哪一類數(shù)據(jù)庫(kù),以及數(shù)據(jù)庫(kù)可能有變化時(shí)。
3.設(shè)計(jì)一個(gè)連接服務(wù)器的框架,需要三個(gè)協(xié)議,“POP3”、“IMAP”、“HTTP”,可以把這三個(gè)作為產(chǎn)品類,共同實(shí)現(xiàn)一個(gè)接口。
一、實(shí)現(xiàn)方式
例如:我們需要在電商平臺(tái)購(gòu)買一臺(tái)手機(jī),我們并不需要去關(guān)心手機(jī)生產(chǎn)廠商是如何把手機(jī)生產(chǎn)出來(lái)的,我們只需要在搜索框輸入:華為手機(jī),小米手機(jī),就能購(gòu)買到我們想要的手機(jī)了。下面看看具體實(shí)現(xiàn)吧。
1、定義一個(gè)接口
package com.asurplus.common.factory;
public interface Phone {
/**
* 獲取手機(jī)
*
* @return
*/
String getPhone();
}
2、定義兩個(gè)接口實(shí)現(xiàn)類
package com.asurplus.common.factory;
/**
* 華為手機(jī)實(shí)現(xiàn)類
*/
public class HuaweiPhone implements Phone {
@Override
public String getPhone() {
return "華為手機(jī)";
}
}
package com.asurplus.common.factory;
/**
* 小米手機(jī)實(shí)現(xiàn)類
*/
public class XiaomiPhone implements Phone {
@Override
public String getPhone() {
return "小米手機(jī)";
}
}
3、定義一個(gè)工廠類
package com.asurplus.common.factory;
/**
* 手機(jī)工廠類
*/
public class PhoneFactory {
/**
* 獲取手機(jī)
*
* @param name
* @return
*/
public static Phone getPhone(String name) {
if ("華為".equals(name)) {
return new HuaweiPhone();
}
if ("小米".equals(name)) {
return new XiaomiPhone();
}
return null;
}
}
二、測(cè)試
package com.asurplus.common.factory;
/**
* 工廠模式
*/
public class TestMain {
public static void main(String[] args) {
// 獲取手機(jī)
Phone huaweiPhone = PhoneFactory.getPhone("華為");
System.out.println(huaweiPhone.getPhone());
}
}
輸出結(jié)果

我們輸入的:華為,得到了華為手機(jī),從而實(shí)現(xiàn)了我們的工廠模式。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
SpringBoot集成Spring Data JPA及讀寫(xiě)分離
這篇文章主要介紹了SpringBoot集成Spring Data JPA及讀寫(xiě)分離的相關(guān)知識(shí),需要的朋友可以參考下2017-04-04
Java使用hutool實(shí)現(xiàn)文件大小的友好輸出
這篇文章主要為大家詳細(xì)介紹了Java如何使用hutool實(shí)現(xiàn)文件大小的友好輸出,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下2023-11-11
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(9)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07
Java HttpClient-Restful工具各種請(qǐng)求高度封裝提煉及總結(jié)
這篇文章主要介紹了Java HttpClient-Restful工具各種請(qǐng)求高度封裝提煉及總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10
Windows下Java調(diào)用OCR進(jìn)行圖片識(shí)別
這篇文章主要為大家詳細(xì)介紹了Windows下Java調(diào)用OCR進(jìn)行圖片識(shí)別,通過(guò)Tesseract-OCR對(duì)圖片進(jìn)行識(shí)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12
Java使用itextpdf實(shí)現(xiàn)Excel轉(zhuǎn)PDF
這篇文章主要為大家詳細(xì)介紹了Java如何使用itextpdf實(shí)現(xiàn)Excel轉(zhuǎn)PDF,并且支持xlsx和xls兩種格,文中的示例代碼講解詳細(xì),希望對(duì)大家有所幫助2024-01-01
詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)
這篇文章主要介紹了詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)的相關(guān)資料,需要的朋友可以參考下2017-02-02

