国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java 基礎(chǔ):設(shè)計(jì)模式之工廠方法模式

這篇具有很好參考價(jià)值的文章主要介紹了Java 基礎(chǔ):設(shè)計(jì)模式之工廠方法模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

工廠方法模式(Factory Method Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一個(gè)創(chuàng)建對(duì)象的通用接口,但將實(shí)際創(chuàng)建邏輯推遲到子類中實(shí)現(xiàn)。這種模式允許客戶端使用抽象接口來創(chuàng)建特定類型的對(duì)象,而無需了解具體的實(shí)現(xiàn)細(xì)節(jié)。以下是工廠方法模式的詳細(xì)分析:

一. 定義與目的

定義
工廠方法模式定義了一個(gè)創(chuàng)建對(duì)象的接口,但讓子類決定實(shí)例化哪一個(gè)類。工廠方法使得一個(gè)類的實(shí)例化過程延遲到子類進(jìn)行。

目的

  • 封裝對(duì)象創(chuàng)建過程:將對(duì)象的創(chuàng)建細(xì)節(jié)封裝在工廠類中,客戶端只需要調(diào)用工廠方法即可獲取所需對(duì)象,無需關(guān)心對(duì)象的具體創(chuàng)建邏輯。
  • 解耦:通過引入抽象層,將創(chuàng)建產(chǎn)品的職責(zé)與使用產(chǎn)品的職責(zé)分離,使得兩者之間的依賴關(guān)系變得松散,有利于系統(tǒng)擴(kuò)展和維護(hù)。
  • 支持多態(tài)性:由于具體的產(chǎn)品類由子工廠類創(chuàng)建,可以根據(jù)需求靈活地切換產(chǎn)品類型,且不影響客戶端代碼。

二. 模式結(jié)構(gòu)

  • Product(產(chǎn)品接口/抽象類):定義了所有具體產(chǎn)品共有的公共接口或抽象方法,供客戶端使用。
  • ConcreteProduct(具體產(chǎn)品):實(shí)現(xiàn)了 Product 接口/繼承了抽象類,是實(shí)際被創(chuàng)建的對(duì)象。
  • Factory(工廠接口/抽象類):聲明了一個(gè)用于創(chuàng)建 Product 對(duì)象的公共方法(通常命名為 createProduct()makeProduct()),該方法返回一個(gè) Product 類型的引用。
  • ConcreteFactory(具體工廠):實(shí)現(xiàn)了 Factory 接口/繼承了抽象工廠類,負(fù)責(zé)創(chuàng)建具體的產(chǎn)品對(duì)象,即實(shí)現(xiàn) createProduct() 方法,返回的是 ConcreteProduct 類型的實(shí)例。

三. 示例說明

以創(chuàng)建不同類型的圖形(如圓形、正方形)為例,說明工廠方法模式的實(shí)現(xiàn):

// 1. Product - 圖形接口
public interface Shape {
    void draw();
}

// 2. ConcreteProduct - 具體圖形類
public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a circle.");
    }
}

public class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a square.");
    }
}

// 3. Factory - 圖形工廠接口
public interface ShapeFactory {
    Shape createShape(String type);
}

// 4. ConcreteFactory - 具體工廠類
public class ShapeFactoryImpl implements ShapeFactory {
    @Override
    public Shape createShape(String type) {
        if ("circle".equalsIgnoreCase(type)) {
            return new Circle();
        } else if ("square".equalsIgnoreCase(type)) {
            return new Square();
        } else {
            throw new IllegalArgumentException("Unsupported shape type");
        }
    }
}

// 5. 客戶端代碼
public class Client {
    public static void main(String[] args) {
        ShapeFactory factory = new ShapeFactoryImpl();

        Shape circle = factory.createShape("circle");
        circle.draw(); // 輸出:Drawing a circle.

        Shape square = factory.createShape("square");
        square.draw(); // 輸出:Drawing a square.
    }
}

在這個(gè)例子中,客戶端通過 ShapeFactoryImpl 創(chuàng)建所需類型的 Shape 對(duì)象,而無需直接與 CircleSquare 類打交道。如果需要添加新的圖形類型(如三角形),只需增加一個(gè)新的 Triangle 類實(shí)現(xiàn) Shape 接口,并在工廠類中添加相應(yīng)的創(chuàng)建邏輯,客戶端代碼無需更改。

四. 存在的問題

雖然工廠方法模式提供了諸多優(yōu)點(diǎn),但在實(shí)際應(yīng)用中也存在一些問題和挑戰(zhàn):

1. 類爆炸
隨著產(chǎn)品種類的增加,需要為每種產(chǎn)品創(chuàng)建對(duì)應(yīng)的 ConcreteProduct 類,同時(shí)也會(huì)對(duì)應(yīng)增加 ConcreteFactory 類的數(shù)量。如果產(chǎn)品種類繁多,可能會(huì)導(dǎo)致類數(shù)量急劇增長(zhǎng),增加系統(tǒng)的復(fù)雜性和管理難度。

2. 代碼冗余
在 ConcreteFactory 類中,可能需要編寫大量的條件判斷語(yǔ)句來決定創(chuàng)建哪種具體產(chǎn)品,特別是在產(chǎn)品類型較多時(shí),這部分代碼容易變得冗長(zhǎng)且難以維護(hù)。

3. 擴(kuò)展困難
如果新添加的產(chǎn)品類型與已有的產(chǎn)品類型差異較大,可能需要修改現(xiàn)有的工廠類,違反了開閉原則(Open/Closed Principle),即對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉。

4. 遺棄了簡(jiǎn)單性
對(duì)于簡(jiǎn)單的對(duì)象創(chuàng)建場(chǎng)景,使用工廠方法模式可能會(huì)過度設(shè)計(jì),增加了系統(tǒng)的復(fù)雜性。如果對(duì)象的創(chuàng)建邏輯并不復(fù)雜,直接使用 new 運(yùn)算符創(chuàng)建對(duì)象可能更為直觀和簡(jiǎn)潔。

解決這些問題通常需要結(jié)合實(shí)際情況進(jìn)行權(quán)衡,比如使用抽象工廠模式來應(yīng)對(duì)多個(gè)相關(guān)產(chǎn)品族的創(chuàng)建,或者使用依賴注入框架來簡(jiǎn)化對(duì)象的創(chuàng)建和管理。在設(shè)計(jì)階段應(yīng)充分考慮未來可能的變化和擴(kuò)展需求,合理選擇設(shè)計(jì)模式或架構(gòu)方案。文章來源地址http://www.zghlxwxcb.cn/news/detail-861686.html

到了這里,關(guān)于Java 基礎(chǔ):設(shè)計(jì)模式之工廠方法模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java與設(shè)計(jì)模式(2):工廠方法模式

    工廠方法模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種將對(duì)象的創(chuàng)建委托給子類的方式。在工廠方法模式中,我們定義一個(gè)抽象的工廠類,該類負(fù)責(zé)定義創(chuàng)建對(duì)象的接口,但具體的對(duì)象創(chuàng)建由子類來實(shí)現(xiàn)。這樣可以將對(duì)象的創(chuàng)建和使用解耦,使得系統(tǒng)更加靈活和可擴(kuò)展。 工廠方

    2024年02月11日
    瀏覽(17)
  • 【Java 設(shè)計(jì)模式】創(chuàng)建型之工廠方法模式

    【Java 設(shè)計(jì)模式】創(chuàng)建型之工廠方法模式

    在軟件開發(fā)中,工廠方法模式是一種常見的創(chuàng)建型設(shè)計(jì)模式, 它提供了一種將對(duì)象的實(shí)例化延遲到子類的方法 。工廠方法模式通過定義一個(gè)創(chuàng)建對(duì)象的接口,但是讓子類決定實(shí)例化哪個(gè)類。在本文中,我們將介紹 Java 設(shè)計(jì)模式中的工廠方法模式,了解其定義、使用場(chǎng)景以及

    2024年01月17日
    瀏覽(26)
  • 【拆解設(shè)計(jì)模式】工廠方法及其Java示例

    在我們的編程世界中,設(shè)計(jì)模式就如同一盞指路明燈,引領(lǐng)我們走向優(yōu)雅、高效的代碼之路。設(shè)計(jì)模式是一種在特定環(huán)境下解決特定問題的優(yōu)秀方案,它是前人的經(jīng)驗(yàn)總結(jié),是我們編程的寶貴財(cái)富。 1.1 設(shè)計(jì)模式的定義和分類 設(shè)計(jì)模式,簡(jiǎn)單來說,就是一套被反復(fù)使用、多數(shù)

    2024年01月20日
    瀏覽(34)
  • [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 多態(tài)工廠的實(shí)現(xiàn)——工廠方法模式

    [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 多態(tài)工廠的實(shí)現(xiàn)——工廠方法模式

    前言: 為什么之前寫過Golang 版的設(shè)計(jì)模式,還在重新寫 Java 版? 答:因?yàn)閷?duì)于我而言,當(dāng)然也希望對(duì)正在學(xué)習(xí)的大伙有幫助。Java作為一門純面向?qū)ο蟮恼Z(yǔ)言,更適合用于學(xué)習(xí)設(shè)計(jì)模式。 為什么類圖要附上uml 因?yàn)楹芏嗳藢W(xué)習(xí)有做筆記的習(xí)慣,如果單純的只是放一張圖片,那

    2024年01月21日
    瀏覽(23)
  • 《Java極簡(jiǎn)設(shè)計(jì)模式》第03章:工廠方法模式(FactoryMethod)

    《Java極簡(jiǎn)設(shè)計(jì)模式》第03章:工廠方法模式(FactoryMethod)

    作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章匯總:https://binghe.gitcode.host/md/all/all.html 源碼地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-factorymethod 沉淀,成長(zhǎng),突破,幫助他人,成就自我。 本章難度:★★☆☆☆ 本章重點(diǎn):

    2024年02月12日
    瀏覽(25)
  • Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    ????????在平時(shí)的開發(fā)中,涉及到設(shè)計(jì)模式的有兩塊內(nèi)容,第一個(gè)是我們 平時(shí)使用的框架 (比如spring、mybatis等),第二個(gè)是我們自己開發(fā)業(yè)務(wù)使用的設(shè)計(jì)模式。 ????????面試官一般比較關(guān)心的是你在開發(fā)過程中, 有沒有使用過設(shè)計(jì)模式,或者你在簡(jiǎn)歷上寫了關(guān)于設(shè)計(jì)

    2024年02月10日
    瀏覽(29)
  • 【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    【Java基礎(chǔ)教程】(十五)面向?qū)ο笃?· 第九講:抽象類和接口——定義、限制與應(yīng)用的細(xì)節(jié),初窺模板設(shè)計(jì)模式、工廠設(shè)計(jì)模式與代理設(shè)計(jì)模式~

    掌握 抽象類和接口的定義、使用、區(qū)別、常見設(shè)計(jì)模式; 抽象類是代碼開發(fā)中的重要組成部分,利用抽象類可以明確地定義子類需要覆寫的方法,這樣相當(dāng)于在語(yǔ)法程度上對(duì)子類進(jìn)行了嚴(yán)格的定義限制,代碼的開發(fā)也就更加標(biāo)準(zhǔn)。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(25)
  • 設(shè)計(jì)模式-簡(jiǎn)單工廠模式(靜態(tài)工廠模式)java實(shí)現(xiàn)

    設(shè)計(jì)模式-簡(jiǎn)單工廠模式(靜態(tài)工廠模式)java實(shí)現(xiàn)

    簡(jiǎn)單工廠模式根據(jù)所 提供的參數(shù) 數(shù)據(jù)返回幾個(gè)可能類中的一個(gè)類的實(shí)例。通常返回的類都有一個(gè)公共的父類和公共的方法。 ? 意圖 提供一個(gè)類,負(fù)責(zé)根據(jù)一定的條件創(chuàng)建某一具體類的實(shí)例。同時(shí)使用工廠模式也是為了隱藏創(chuàng)建對(duì)象的過程 角色及其職責(zé) (1)工廠(Creator)角色

    2024年02月13日
    瀏覽(29)
  • Java設(shè)計(jì)模式——工廠模式

    Java設(shè)計(jì)模式——工廠模式

    目錄 設(shè)計(jì)模式系列文章 前言 一、簡(jiǎn)單工廠模式 二、工廠方法模式 三、抽象工廠模式 總結(jié) 最近在學(xué)習(xí)一些Java設(shè)計(jì)模式的概念,設(shè)計(jì)模式誕生的目的,我認(rèn)為是可以使得寫出的代碼具有更好的邏輯性,減少了大量冗余代碼來進(jìn)行重復(fù)而繁瑣的操作,也更好的提升了復(fù)用性。

    2023年04月13日
    瀏覽(24)
  • JAVA設(shè)計(jì)模式—工廠模式

    工廠模式是一種創(chuàng)建型設(shè)計(jì)模式,它提供了一種創(chuàng)建對(duì)象的接口,但是由子類決定要實(shí)例化的類是哪一個(gè)。工廠模式使得一個(gè)類的實(shí)例化延遲到其子類。 用代碼進(jìn)行舉例演示 假設(shè)我們有一個(gè)產(chǎn)品接口 Product 和兩個(gè)具體產(chǎn)品類 ConcreteProductA 和 ConcreteProductB ,以及一個(gè)工廠接口

    2024年01月24日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包