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

我們輸入的:華為,得到了華為手機,從而實現了我們的工廠模式。
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
SpringBoot集成Spring Data JPA及讀寫分離
這篇文章主要介紹了SpringBoot集成Spring Data JPA及讀寫分離的相關知識,需要的朋友可以參考下2017-04-04
Java HttpClient-Restful工具各種請求高度封裝提煉及總結
這篇文章主要介紹了Java HttpClient-Restful工具各種請求高度封裝提煉及總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
詳解Java中l(wèi)ist,set,map的遍歷與增強for循環(huán)
這篇文章主要介紹了詳解Java中l(wèi)ist,set,map的遍歷與增強for循環(huán)的相關資料,需要的朋友可以參考下2017-02-02

