簡單工廠模式
基本定義:
簡單工廠模式又稱之爲靜態工廠方法,屬於創建型模式。在簡單工廠模式中,可以根據傳遞的參數不同,返回不同類的實例。簡單工廠模式定義了一個類,這個類專門用於創建其他類的實例,這些被創建的類都有一個共同的父類。
模式結構:
1. Factory:工廠角色。專門用於創建實例類的工廠,提供一個方法,該方法根據傳遞的參數不同返回不同類的具體實例。
2. Product:抽象產品角色。爲所有產品的父類。
3. ConcreteProduct:具體的產品角色。
代碼實現:
1、Product 抽象產品類
···
/*** @Description Product 抽象產品類
* @Author yanyuan
* @Date 18:27 2020/4/14
* @Version 1.0
**/publicinterface Phone {void make();void call();
}
···
2、Concrete Product 具體產品類
···
import lombok.extern.slf4j.Slf4j;/*** @Description 華爲手機
* @Author yanyuan
* @Date 18:30 2020/4/14
* @Version 1.0
**/@Slf4jpublicclassHuaweiPhoneimplements Phone {
@Overridepublicvoid make() {
log.info("華爲手機制作完成");
}
@Overridepublicvoid call() {
log.info("華爲手機撥打電話");
}
}
···
···
/*** @Description Concrete Product 具體產品類
* @Author yanyuan
* @Date 18:28 2020/4/14
* @Version 1.0
**/@Slf4jpublicclassIPhoneimplements Phone{
@Overridepublicvoid make() {
log.info("製作iPhone手機");
}
@Overridepublicvoid call() {
log.info("iPhone手機撥打電話");
}
}
···
3、Factory 工廠角色類
···
import lombok.extern.slf4j.Slf4j;/*** @Description Factory 工廠角色類
* @Author yanyuan
* @Date 22:06 2020/4/14
* @Version 1.0
**/@Slf4jpublicclass SimpleFactory {public Phone createPhone(String brand){
Phone phone =null;switch (brand){case"HUAWEI":
phone =new HuaweiPhone();break;case"IPHONE":
phone =new IPhone();break;default:
log.error("暫不支持該品牌手機");break;
}return phone;
}
}
···
4、測試類
···
/*** @Description 簡單工廠模式測試類
* @Author yanyuan
* @Date 22:10 2020/4/14
* @Version 1.0
**/publicclass Test {publicstaticvoid main(String[] args) {
SimpleFactory factory =new SimpleFactory();
Phone huaweiPhone = factory.createPhone("HUAWEI");
huaweiPhone.make();
huaweiPhone.call();
Phone iPhone = factory.createPhone("IPHONE");
iPhone.make();
iPhone.call();
}
}
···
輸出結果
22:16:19.325 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.HuaweiPhone - 華爲手機制作完成
22:16:19.343 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.HuaweiPhone - 華爲手機撥打電話
22:16:19.344 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.IPhone - 製作iPhone手機
22:16:19.344 [main] INFO com.yanyuan.gof.build.simpleFactory.v2.IPhone - iPhone手機撥打電話
優缺點
優點
實現了對責任的分隔,提供了專門工廠類創建對象。
用戶無需知道具體產品名。
通過配置文件方式,可以在不修改客戶端(消費端)代碼情況下變更/增加新產品,在一定程序上提高了系統的靈活性。
缺點
由於工廠類集中了所以產品創建邏輯,一旦不能正常工作,整個系統受影響。
使用簡單工廠模式將增加系統類的個數,在一定程度上增加了系統的複雜度和理解。
系統擴展困難,一旦添加了新產品就不得不修改工廠邏輯,在產品類型較多時,有可能造成工廠邏輯過於複雜,不利於系統的擴展和維護。
總結
簡單工廠模式的要點就在於當你需要什麼,只需要知道正確參數,就可以獲取你所需要的對象,無需知道其創建細節。
簡單工廠模式最大的優點在於實現對象的創建和對象的分離,但是如果產品過多時,會導致工廠代碼複雜。