Java 深入探究講解工廠方法模式
1. 工廠方法模式介紹
定義:工廠方法模式是對簡單工廠模式進(jìn)一步的抽象化,好處是可以使系統(tǒng)不修改原來代碼的情況下引進(jìn)新的產(chǎn)品,即滿足開閉原則。定義一個用于創(chuàng)建對象接口,讓子類決定實例化哪一個類,使一個類的實例化延遲到子類中。
2. 工廠方法模式類圖UML

3. 工廠方法模式角色說明
抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用方通過它訪問具體工廠的工廠方法來創(chuàng)建產(chǎn)品
具體工廠(ConcreteFactory):實現(xiàn)了抽象工廠定義的方法,完成具體產(chǎn)品的創(chuàng)建
抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述產(chǎn)品的主要特征和性能
具體產(chǎn)品(ConcreteProduct):實現(xiàn)了抽象產(chǎn)品的定義的方法,有具體工廠來創(chuàng)建產(chǎn)品,具體工廠和具體產(chǎn)品一一對應(yīng)
4. 代碼實現(xiàn)
工廠方法模式實現(xiàn):
/**
* 抽象工廠:提供具體工廠的共有方法
*/
public interface Product {
public void show();
}
?
public class ConcreteProduct1 implements Product {
@Override
public void show() {
System.out.println("具體產(chǎn)品1展示...");
}
}
?
public class ConcreateProduct2 implements Product {
@Override
public void show() {
System.out.println("具體產(chǎn)品2展示...");
}
}
?
?
/**
* 抽象工廠
*/
public interface AbstractFactory {
public Product createProduct();
}
?
/**
* 具體工廠1產(chǎn)生具體產(chǎn)品1
*/
public class ConcreteFactory1 implements AbstractFactory {
@Override
public Product createProduct() {
ConcreteProduct1 concreteProduct1 = new ConcreteProduct1();
System.out.println("具體工廠1創(chuàng)建具體產(chǎn)品1...");
return concreteProduct1;
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public Product createProduct() {
System.out.println("具體工廠2產(chǎn)生具體產(chǎn)品2...");
return new ConcreateProduct2();
}
}
調(diào)用方法:
//獲取具體產(chǎn)品1
Product product = new ConcreteFactory1().createProduct();
product.show();
?
Product product1 = new ConcreteFactory2().createProduct();
product1.show();
使用步驟:
- 創(chuàng)建抽象產(chǎn)品類,定義產(chǎn)品的公共方法
- 創(chuàng)建具體產(chǎn)品類(實現(xiàn)抽象產(chǎn)品接口),定義生成的具體產(chǎn)品
- 創(chuàng)建抽象工廠類,定義具體工廠的公共接口
- 創(chuàng)建具體工廠類,定義創(chuàng)建對應(yīng)具體產(chǎn)品實例的方法
- 調(diào)用方調(diào)用具體的工廠類的方法,從而創(chuàng)建不同具體產(chǎn)品的實例
5. 工廠模式再探究
解決問題:解決了簡單工廠類新增產(chǎn)品需要修改工廠類的方法邏輯問題,即為別開閉原則。
將具體的產(chǎn)品創(chuàng)建退出到工廠類的子類(具體工廠),此時工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是給出具體工廠必須實現(xiàn)的接口,這樣工廠方法在添加新的產(chǎn)品的時候,就不需要修改工廠類的邏輯,而是添加了新的工廠子類,符合開閉原則。
6. 優(yōu)缺點
優(yōu)點:
- 靈活性強,對于新產(chǎn)品的創(chuàng)建,只需要多寫一個對應(yīng)的工廠類
- 用戶只需要指導(dǎo)工廠的名稱就可以獲得所要的產(chǎn)品,不需要指導(dǎo)產(chǎn)品具體創(chuàng)建過程
缺點:
- 類的個數(shù)容易過多,增加了復(fù)雜度
- 每一個工廠只能生產(chǎn)一種產(chǎn)品,次弊端可以使用抽象工廠模式解決
7. 應(yīng)用場景
客戶只關(guān)注創(chuàng)建產(chǎn)品的工廠名,不需要知道具體的產(chǎn)品名稱
到此這篇關(guān)于Java 深入探究講解工廠方法模式的文章就介紹到這了,更多相關(guān)Java 工廠方法 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決SpringBoot中使用@Transactional注解遇到的問題
這篇文章主要介紹了SpringBoot中使用@Transactional注解遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
jenkins+Maven從SVN上構(gòu)建項目的方法
這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項目,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
springboot2中session超時,退到登錄頁面方式
這篇文章主要介紹了springboot2中session超時,退到登錄頁面方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01

