Java?深入探究講解簡(jiǎn)單工廠模式
1. 簡(jiǎn)單工廠介紹
簡(jiǎn)單工廠有一個(gè)具體的工廠類,可以生產(chǎn)不同的產(chǎn)品,屬于創(chuàng)建型設(shè)計(jì)模式。
注意:簡(jiǎn)單工廠模式 不屬于23種設(shè)計(jì)模式之列
2. 簡(jiǎn)單工廠類圖UML

3. 簡(jiǎn)單工廠角色說(shuō)明
簡(jiǎn)單工廠(SimpleFactory):是簡(jiǎn)單工廠模式的核心,負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯,工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接訪問,創(chuàng)建所需的產(chǎn)品對(duì)象。
抽象產(chǎn)品(Product):是簡(jiǎn)單工廠創(chuàng)建所有對(duì)象的父類,負(fù)責(zé)描述所有實(shí)例公有的公共接口
具體產(chǎn)品(ConcreteProduct):是簡(jiǎn)單工廠創(chuàng)建的具體對(duì)象
4. 代碼實(shí)現(xiàn)
簡(jiǎn)單工廠實(shí)現(xiàn):
/**
* 抽象產(chǎn)品,提供所有具體產(chǎn)品的共有的方法
*/
public interface Product {
public void show();
}
?
/**
* 具體產(chǎn)品1
*/
public class ConcreteProduct1 implements Product {
@Override
public void show() {
System.out.println("具體產(chǎn)品1展示...");
}
}
?
?
/**
* 具體產(chǎn)品2
*/
public class ConcreteProduct2 implements Product {
@Override
public void show() {
System.out.println("具體產(chǎn)品2展示...");
}
}
?
/**
* 簡(jiǎn)單工廠
*/
public class SimpleFactory {
//提供一個(gè)方法,基于不同的參數(shù)獲取不同的實(shí)例對(duì)象
public static Product getConcreteProduct(int productType) {
switch (productType) {
case Const.Product1:
return new ConcreteProduct1();
case Const.Product2:
return new ConcreteProduct2();
case Const.Product3:
return new ConcreteProduct3();
}
return null;
}
?
?
final class Const {
static final int Product1 = 1;//表示是ConcreteProduct1產(chǎn)品
static final int Product2 = 2;//表示是ConcreteProduct2產(chǎn)品
static final int Product3 = 3;//表示是ConcreteProduct3產(chǎn)品
}
調(diào)用方式:
//獲取產(chǎn)品1
Product product = SimpleFactory.getConcreteProduct(Const.Product1);
product.show();
//獲取產(chǎn)品2
Product product1 = SimpleFactory.getConcreteProduct(Const.Product2);
product1.show();使用步驟:
- 創(chuàng)建抽象產(chǎn)品類和定義具體產(chǎn)品的公共接口
- 創(chuàng)建具體產(chǎn)品類,定義生產(chǎn)的具體產(chǎn)品
- 創(chuàng)建工廠類,通過創(chuàng)建靜態(tài)方法根據(jù)傳入不同的參數(shù)從而創(chuàng)建不同的具體產(chǎn)品的實(shí)例
- 外界通過調(diào)用工廠類的靜態(tài)方法,傳入不同的參數(shù)創(chuàng)建不同的產(chǎn)品實(shí)例
5. 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 代碼邏輯比較簡(jiǎn)單,工廠類包含必要的創(chuàng)建對(duì)象的邏輯,可以決定創(chuàng)建具體的產(chǎn)品
- 調(diào)用方無(wú)需指導(dǎo)所創(chuàng)建具體產(chǎn)品的類名,只需要知道參數(shù)即可
缺點(diǎn):
- 簡(jiǎn)單工廠違背開閉原則,工廠類負(fù)責(zé)產(chǎn)品的創(chuàng)建職責(zé)過重,一旦新增產(chǎn)品需要對(duì)工廠類內(nèi)部邏輯新增判斷
- 系統(tǒng)擴(kuò)展困難,產(chǎn)品過多會(huì)造成邏輯過于復(fù)雜
6. 使用場(chǎng)景
對(duì)于產(chǎn)品種類比較少的情況,可以考慮使用簡(jiǎn)單工廠,調(diào)用方只需要傳入工廠類的參數(shù),不需要關(guān)注如何創(chuàng)建的邏輯.
到此這篇關(guān)于Java 深入探究講解簡(jiǎn)單工廠模式的文章就介紹到這了,更多相關(guān)Java 簡(jiǎn)單工廠模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào)
這篇文章主要介紹了如何用匿名內(nèi)部類實(shí)現(xiàn) Java 同步回調(diào),幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-10-10
解決Springboot項(xiàng)目啟動(dòng)后自動(dòng)創(chuàng)建多表關(guān)聯(lián)的數(shù)據(jù)庫(kù)與表的方案
這篇文章主要介紹了解決Springboot項(xiàng)目啟動(dòng)后自動(dòng)創(chuàng)建多表關(guān)聯(lián)的數(shù)據(jù)庫(kù)與表的方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
java中LinkedBlockingQueue與ArrayBlockingQueue的異同
這篇文章主要介紹了java中LinkedBlockingQueue與ArrayBlockingQueue的異同,需要的朋友可以參考下2016-08-08
@RunWith(SpringJUnit4ClassRunner.class)報(bào)錯(cuò)問題及解決
這篇文章主要介紹了@RunWith(SpringJUnit4ClassRunner.class)報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04

