欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 深入探究講解工廠方法模式

 更新時(shí)間:2022年04月06日 18:14:15   作者:靜靜子?  
工廠方法模式(FACTORY METHOD)是一種常用的類創(chuàng)建型設(shè)計(jì)模式,此模式的核心精神是封裝類中變化的部分,提取其中個(gè)性化善變的部分為獨(dú)立類,通過依賴注入以達(dá)到解耦、復(fù)用和方便后期維護(hù)拓展的目的。它的核心結(jié)構(gòu)有四個(gè)角色,分別是抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品

1. 工廠方法模式介紹

定義:工廠方法模式是對(duì)簡(jiǎn)單工廠模式進(jìn)一步的抽象化,好處是可以使系統(tǒng)不修改原來(lái)代碼的情況下引進(jìn)新的產(chǎn)品,即滿足開閉原則。定義一個(gè)用于創(chuàng)建對(duì)象接口,讓子類決定實(shí)例化哪一個(gè)類,使一個(gè)類的實(shí)例化延遲到子類中。

2. 工廠方法模式類圖UML

img

3. 工廠方法模式角色說(shuō)明

抽象工廠(AbstractFactory):提供了創(chuàng)建產(chǎn)品的接口,調(diào)用方通過它訪問具體工廠的工廠方法來(lái)創(chuàng)建產(chǎn)品

具體工廠(ConcreteFactory):實(shí)現(xiàn)了抽象工廠定義的方法,完成具體產(chǎn)品的創(chuàng)建

抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述產(chǎn)品的主要特征和性能

具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品的定義的方法,有具體工廠來(lái)創(chuàng)建產(chǎn)品,具體工廠和具體產(chǎn)品一一對(duì)應(yīng)

4. 代碼實(shí)現(xiàn)

工廠方法模式實(shí)現(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)品類(實(shí)現(xiàn)抽象產(chǎn)品接口),定義生成的具體產(chǎn)品
  • 創(chuàng)建抽象工廠類,定義具體工廠的公共接口
  • 創(chuàng)建具體工廠類,定義創(chuàng)建對(duì)應(yīng)具體產(chǎn)品實(shí)例的方法
  • 調(diào)用方調(diào)用具體的工廠類的方法,從而創(chuàng)建不同具體產(chǎn)品的實(shí)例

5. 工廠模式再探究

解決問題:解決了簡(jiǎn)單工廠類新增產(chǎn)品需要修改工廠類的方法邏輯問題,即為別開閉原則。

將具體的產(chǎn)品創(chuàng)建退出到工廠類的子類(具體工廠),此時(shí)工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是給出具體工廠必須實(shí)現(xiàn)的接口,這樣工廠方法在添加新的產(chǎn)品的時(shí)候,就不需要修改工廠類的邏輯,而是添加了新的工廠子類,符合開閉原則。

6. 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 靈活性強(qiáng),對(duì)于新產(chǎn)品的創(chuàng)建,只需要多寫一個(gè)對(duì)應(yīng)的工廠類
  • 用戶只需要指導(dǎo)工廠的名稱就可以獲得所要的產(chǎn)品,不需要指導(dǎo)產(chǎn)品具體創(chuàng)建過程

缺點(diǎn):

  • 類的個(gè)數(shù)容易過多,增加了復(fù)雜度
  • 每一個(gè)工廠只能生產(chǎn)一種產(chǎn)品,次弊端可以使用抽象工廠模式解決

7. 應(yīng)用場(chǎng)景

客戶只關(guān)注創(chuàng)建產(chǎn)品的工廠名,不需要知道具體的產(chǎn)品名稱

到此這篇關(guān)于Java 深入探究講解工廠方法模式的文章就介紹到這了,更多相關(guān)Java 工廠方法 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 整理很詳細(xì)的Java正則表達(dá)式使用大全

    整理很詳細(xì)的Java正則表達(dá)式使用大全

    這篇文章為大家整理了很詳細(xì)的Java正則表達(dá)式使用大全,大家在使用Java正則表達(dá)式的時(shí)候可查閱這篇文章,認(rèn)為不錯(cuò)的朋友可以收藏起來(lái)
    2015-12-12
  • 解決SpringBoot中使用@Transactional注解遇到的問題

    解決SpringBoot中使用@Transactional注解遇到的問題

    這篇文章主要介紹了SpringBoot中使用@Transactional注解遇到的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring框架的JdbcTemplate使用

    Spring框架的JdbcTemplate使用

    它是 Spring 框架中提供的一個(gè)對(duì)象,是對(duì)原始 Jdbc API 對(duì)象的簡(jiǎn)單封裝。本文就來(lái)介紹一下Spring框架的JdbcTemplate使用,感興趣的可以了解一下
    2021-09-09
  • jenkins+Maven從SVN上構(gòu)建項(xiàng)目的方法

    jenkins+Maven從SVN上構(gòu)建項(xiàng)目的方法

    這篇文章主要介紹了jenkins+Maven從SVN上構(gòu)建項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java實(shí)現(xiàn)的海盜算法優(yōu)化版

    java實(shí)現(xiàn)的海盜算法優(yōu)化版

    這篇文章主要介紹了java實(shí)現(xiàn)的海盜算法優(yōu)化版,結(jié)合實(shí)例形式分析了java海盜算法的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • Java實(shí)例講解注解的應(yīng)用

    Java實(shí)例講解注解的應(yīng)用

    JAVA注解?Annotation(注解)是JDK1.5及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時(shí)檢查。注解是以‘@注解名’在代碼中存在的
    2022-06-06
  • Spring Boot 整合 Druid過程解析

    Spring Boot 整合 Druid過程解析

    這篇文章主要介紹了Spring Boot 整合 Druid過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 利用Java實(shí)現(xiàn)帶GUI的氣泡詩(shī)詞特效

    利用Java實(shí)現(xiàn)帶GUI的氣泡詩(shī)詞特效

    這篇文章主要為大家介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)帶GUI的氣泡詩(shī)詞特效,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-08-08
  • springboot2中session超時(shí),退到登錄頁(yè)面方式

    springboot2中session超時(shí),退到登錄頁(yè)面方式

    這篇文章主要介紹了springboot2中session超時(shí),退到登錄頁(yè)面方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java四個(gè)線程常用函數(shù)超全使用詳解

    Java四個(gè)線程常用函數(shù)超全使用詳解

    這篇文章主要為大家介紹了線程中常用的四個(gè)函數(shù):wait()、join()、sleep() 和 yield(),以及這四個(gè)函數(shù)的使用方法和相互之間的區(qū)別,需要的可以參考一下
    2022-03-03

最新評(píng)論