Java?深入探究講解簡單工廠模式
1. 簡單工廠介紹
簡單工廠有一個(gè)具體的工廠類,可以生產(chǎn)不同的產(chǎn)品,屬于創(chuàng)建型設(shè)計(jì)模式。
注意:簡單工廠模式 不屬于23種設(shè)計(jì)模式之列
2. 簡單工廠類圖UML
3. 簡單工廠角色說明
簡單工廠(SimpleFactory):是簡單工廠模式的核心,負(fù)責(zé)實(shí)現(xiàn)創(chuàng)建所有實(shí)例的內(nèi)部邏輯,工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接訪問,創(chuàng)建所需的產(chǎn)品對(duì)象。
抽象產(chǎn)品(Product):是簡單工廠創(chuàng)建所有對(duì)象的父類,負(fù)責(zé)描述所有實(shí)例公有的公共接口
具體產(chǎn)品(ConcreteProduct):是簡單工廠創(chuàng)建的具體對(duì)象
4. 代碼實(shí)現(xià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展示..."); } } ? /** * 簡單工廠 */ 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):
- 代碼邏輯比較簡單,工廠類包含必要的創(chuàng)建對(duì)象的邏輯,可以決定創(chuàng)建具體的產(chǎn)品
- 調(diào)用方無需指導(dǎo)所創(chuàng)建具體產(chǎn)品的類名,只需要知道參數(shù)即可
缺點(diǎ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)品種類比較少的情況,可以考慮使用簡單工廠,調(diào)用方只需要傳入工廠類的參數(shù),不需要關(guān)注如何創(chuàng)建的邏輯.
到此這篇關(guān)于Java 深入探究講解簡單工廠模式的文章就介紹到這了,更多相關(guān)Java 簡單工廠模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 如何添加容器啟動(dòng)的初始化邏輯的操作方法
這篇文章主要介紹了SpringBoot 如何添加容器啟動(dòng)的初始化邏輯,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09Java實(shí)現(xiàn)簡單猜數(shù)字小游戲
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12基于IDEA,Eclipse搭建Spring Boot項(xiàng)目過程圖解
這篇文章主要介紹了基于IDEA,Eclipse搭建Spring Boot項(xiàng)目過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽
這篇文章主要介紹了Java基于ServletContextListener實(shí)現(xiàn)UDP監(jiān)聽,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Java利用Request請(qǐng)求獲取IP地址的方法詳解
在開發(fā)中我們經(jīng)常需要獲取用戶IP地址,通過地址來實(shí)現(xiàn)一些功能,下面這篇文章主要給大家介紹了關(guān)于Java利用Request請(qǐng)求獲取IP地址的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-10-10Java語言的Comparable和Comparator區(qū)別
這篇文章主要介紹了Java語言的Comparable和Comparator區(qū)別,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法
這篇文章主要介紹了SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06