Java中常用的設(shè)計(jì)模式之工廠(chǎng)模式詳解
優(yōu)點(diǎn)
1.一個(gè)調(diào)用者想創(chuàng)建一個(gè)對(duì)象,只要知道其名稱(chēng)就可以了。
2.擴(kuò)展性高,如果想增加一個(gè)產(chǎn)品,只要擴(kuò)展一個(gè)工廠(chǎng)類(lèi)就可以。
3.屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。
缺點(diǎn)
1.每次增加一個(gè)產(chǎn)品時(shí),都需要增加一個(gè)具體類(lèi)和對(duì)象實(shí)現(xiàn)工廠(chǎng),使得系統(tǒng)中類(lèi)的個(gè)數(shù)成倍增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,同時(shí)也增加了系統(tǒng)具體類(lèi)的依賴(lài)。這并不是什么好事。
使用場(chǎng)景
1.日志記錄器:記錄可能記錄到本地硬盤(pán)、系統(tǒng)事件、遠(yuǎn)程服務(wù)器等,用戶(hù)可以選擇記錄日志到什么地方。
2.數(shù)據(jù)庫(kù)訪(fǎng)問(wèn),當(dāng)用戶(hù)不知道最后系統(tǒng)采用哪一類(lèi)數(shù)據(jù)庫(kù),以及數(shù)據(jù)庫(kù)可能有變化時(shí)。
3.設(shè)計(jì)一個(gè)連接服務(wù)器的框架,需要三個(gè)協(xié)議,“POP3”、“IMAP”、“HTTP”,可以把這三個(gè)作為產(chǎn)品類(lèi),共同實(shí)現(xiàn)一個(gè)接口。
一、實(shí)現(xiàn)方式
例如:我們需要在電商平臺(tái)購(gòu)買(mǎi)一臺(tái)手機(jī),我們并不需要去關(guān)心手機(jī)生產(chǎn)廠(chǎng)商是如何把手機(jī)生產(chǎn)出來(lái)的,我們只需要在搜索框輸入:華為手機(jī),小米手機(jī),就能購(gòu)買(mǎi)到我們想要的手機(jī)了。下面看看具體實(shí)現(xiàn)吧。
1、定義一個(gè)接口
package com.asurplus.common.factory; public interface Phone { /** * 獲取手機(jī) * * @return */ String getPhone(); }
2、定義兩個(gè)接口實(shí)現(xiàn)類(lèi)
package com.asurplus.common.factory; /** * 華為手機(jī)實(shí)現(xiàn)類(lèi) */ public class HuaweiPhone implements Phone { @Override public String getPhone() { return "華為手機(jī)"; } }
package com.asurplus.common.factory; /** * 小米手機(jī)實(shí)現(xiàn)類(lèi) */ public class XiaomiPhone implements Phone { @Override public String getPhone() { return "小米手機(jī)"; } }
3、定義一個(gè)工廠(chǎng)類(lèi)
package com.asurplus.common.factory; /** * 手機(jī)工廠(chǎng)類(lèi) */ 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; /** * 工廠(chǎng)模式 */ public class TestMain { public static void main(String[] args) { // 獲取手機(jī) Phone huaweiPhone = PhoneFactory.getPhone("華為"); System.out.println(huaweiPhone.getPhone()); } }
輸出結(jié)果
我們輸入的:華為,得到了華為手機(jī),從而實(shí)現(xiàn)了我們的工廠(chǎng)模式。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式淺析講解
- Java超詳細(xì)講解設(shè)計(jì)模式之一的工廠(chǎng)模式
- Java設(shè)計(jì)模式之抽象工廠(chǎng)模式(Abstract?Factory)
- Java?深入理解創(chuàng)建型設(shè)計(jì)模式之抽象工廠(chǎng)模式
- Java設(shè)計(jì)模式之工廠(chǎng)模式案例詳解
- 深入理解Java設(shè)計(jì)模式之簡(jiǎn)單工廠(chǎng)模式
- Java工廠(chǎng)模式優(yōu)雅地創(chuàng)建對(duì)象以及提高代碼復(fù)用率和靈活性
相關(guān)文章
微服務(wù)之間如何通過(guò)feign調(diào)用接口上傳文件
這篇文章主要介紹了微服務(wù)之間如何通過(guò)feign調(diào)用接口上傳文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06高內(nèi)聚低耦合原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
耦合度就是某模塊(類(lèi))與其它模塊(類(lèi))之間的關(guān)聯(lián)、感知和依賴(lài)的程度,是衡量代碼獨(dú)立性的一個(gè)指標(biāo),也是軟件工程設(shè)計(jì)及編碼質(zhì)量評(píng)價(jià)的一個(gè)標(biāo)準(zhǔn)2017-08-08將springboot項(xiàng)目生成可依賴(lài)的jar并引入到項(xiàng)目中的方法
SpringBoot項(xiàng)目默認(rèn)打包的是可運(yùn)行jar包,也可以打包成不可運(yùn)行的jar包,本文給大家介紹將springboot項(xiàng)目生成可依賴(lài)的jar并引入到項(xiàng)目中的方法,感興趣的朋友一起看看吧2023-11-11在SpringBoot中使用YourKit進(jìn)行性能調(diào)優(yōu)的教程詳解
在應(yīng)用程序的開(kāi)發(fā)過(guò)程中,性能調(diào)優(yōu)是一個(gè)重要的環(huán)節(jié),在SpringBoot應(yīng)用程序中,我們可以使用YourKit來(lái)進(jìn)行性能調(diào)優(yōu),YourKit是一款非常強(qiáng)大的Java性能調(diào)優(yōu)工具,在本文中,我們將介紹如何在 SpringBoot應(yīng)用程序中使用YourKit進(jìn)行性能調(diào)優(yōu)2023-06-06Java多線(xiàn)程實(shí)現(xiàn)聊天客戶(hù)端和服務(wù)器
這篇文章主要為大家詳細(xì)介紹了Java多線(xiàn)程聊天客戶(hù)端和服務(wù)器實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例
上傳是Web工程中很常見(jiàn)的功能,SpringMVC框架簡(jiǎn)化了文件上傳的代碼,本文給大家總結(jié)了Spring MVC多種情況下進(jìn)行文件上傳的實(shí)例,并通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02Java讀取properties文件內(nèi)容的幾種方式詳解
這篇文章主要介紹了Java讀取properties文件內(nèi)容的幾種方式詳解,讀取properties配置文件在實(shí)際的開(kāi)發(fā)中使用的很多,本文來(lái)介紹常用的幾種實(shí)現(xiàn)方式,需要的朋友可以參考下2023-11-11