Java?深入探究講解簡單工廠模式
1. 簡單工廠介紹
簡單工廠有一個具體的工廠類,可以生產(chǎn)不同的產(chǎn)品,屬于創(chuàng)建型設(shè)計模式。
注意:簡單工廠模式 不屬于23種設(shè)計模式之列
2. 簡單工廠類圖UML
3. 簡單工廠角色說明
簡單工廠(SimpleFactory):是簡單工廠模式的核心,負(fù)責(zé)實現(xiàn)創(chuàng)建所有實例的內(nèi)部邏輯,工廠類的創(chuàng)建產(chǎn)品類的方法可以被外界直接訪問,創(chuàng)建所需的產(chǎn)品對象。
抽象產(chǎn)品(Product):是簡單工廠創(chuàng)建所有對象的父類,負(fù)責(zé)描述所有實例公有的公共接口
具體產(chǎn)品(ConcreteProduct):是簡單工廠創(chuàng)建的具體對象
4. 代碼實現(xiàn)
簡單工廠實現(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 { //提供一個方法,基于不同的參數(shù)獲取不同的實例對象 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)品的實例
- 外界通過調(diào)用工廠類的靜態(tài)方法,傳入不同的參數(shù)創(chuàng)建不同的產(chǎn)品實例
5. 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
- 代碼邏輯比較簡單,工廠類包含必要的創(chuàng)建對象的邏輯,可以決定創(chuàng)建具體的產(chǎn)品
- 調(diào)用方無需指導(dǎo)所創(chuàng)建具體產(chǎn)品的類名,只需要知道參數(shù)即可
缺點(diǎn):
- 簡單工廠違背開閉原則,工廠類負(fù)責(zé)產(chǎn)品的創(chuàng)建職責(zé)過重,一旦新增產(chǎn)品需要對工廠類內(nèi)部邏輯新增判斷
- 系統(tǒng)擴(kuò)展困難,產(chǎn)品過多會造成邏輯過于復(fù)雜
6. 使用場景
對于產(chǎn)品種類比較少的情況,可以考慮使用簡單工廠,調(diào)用方只需要傳入工廠類的參數(shù),不需要關(guān)注如何創(chuàng)建的邏輯.
到此這篇關(guān)于Java 深入探究講解簡單工廠模式的文章就介紹到這了,更多相關(guān)Java 簡單工廠模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot 如何添加容器啟動的初始化邏輯的操作方法
這篇文章主要介紹了SpringBoot 如何添加容器啟動的初始化邏輯,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09基于IDEA,Eclipse搭建Spring Boot項目過程圖解
這篇文章主要介紹了基于IDEA,Eclipse搭建Spring Boot項目過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽
這篇文章主要介紹了Java基于ServletContextListener實現(xiàn)UDP監(jiān)聽,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12Java語言的Comparable和Comparator區(qū)別
這篇文章主要介紹了Java語言的Comparable和Comparator區(qū)別,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法
這篇文章主要介紹了SpringBoot系列教程JPA之基礎(chǔ)環(huán)境搭建的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06