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

設(shè)計(jì)模式(三):抽象工廠模式

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

1. 抽象工廠模式的介紹

抽象工廠模式(Abstract Factory Pattern)屬于創(chuàng)建型模式,是圍繞一個(gè)超級工廠創(chuàng)建其他工廠。該超級工廠又稱為其他工廠的工廠。

抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對象的工廠,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對象。

通過使用抽象工廠模式,可以將客戶端與具體產(chǎn)品的創(chuàng)建過程解耦,使得客戶端可以通過工廠接口來創(chuàng)建一族產(chǎn)品。

抽象工廠模式包含4個(gè)核心角色:

  • 抽象工廠(Abstract Factory):聲明了一組用于創(chuàng)建產(chǎn)品對象的方法,每個(gè)方法對應(yīng)一種產(chǎn)品類型。抽象工廠可以是接口或抽象類。
  • 具體工廠(Concrete Factory):實(shí)現(xiàn)了抽象工廠接口,負(fù)責(zé)創(chuàng)建具體產(chǎn)品對象的實(shí)例。
  • 抽象產(chǎn)品(Abstract Product):定義了一組產(chǎn)品對象的共同接口或抽象類,描述了產(chǎn)品對象的公共方法。
  • 具體產(chǎn)品(Concrete Product):實(shí)現(xiàn)了抽象產(chǎn)品接口,定義了具體產(chǎn)品的特定行為和屬性。

2. 抽象工廠模式的類圖

設(shè)計(jì)模式(三):抽象工廠模式,設(shè)計(jì)模式,設(shè)計(jì)模式,抽象工廠模式,java文章來源地址http://www.zghlxwxcb.cn/news/detail-858103.html

3. 抽象工廠模式的實(shí)現(xiàn)

3.1 創(chuàng)建摩托車的接口

package blog;

/**
 * 摩托車
 */
public interface Motorcycle {
    void by();
}

3.2 創(chuàng)建摩托車的具體實(shí)現(xiàn)

package blog;

/**
 * 踏板摩托車
 */
public class Scooter implements Motorcycle{
    @Override
    public void by() {
        System.out.println("騎著一輛踏板車");
    }
}
package blog;

/**
 * 彎梁摩托車
 */
public class UnderBone implements Motorcycle{
    @Override
    public void by() {
        System.out.println("騎著一輛彎梁車");
    }
}

3.3 創(chuàng)建汽車的接口

package blog;

/**
 * 汽車
 */
public interface Car {
    void drive();
}

3.4 創(chuàng)建汽車的具體產(chǎn)品

package blog;

/**
 * suv
 */
public class Suv implements Car{
    @Override
    public void drive() {
        System.out.println("開著一輛SUV");
    }
}
package blog;

/**
 * mpv
 */
public class Mpv implements Car{
    @Override
    public void drive() {
        System.out.println("開著一輛MPV");
    }
}

3.5 創(chuàng)建抽象工廠

package blog;

/**
 * 抽象工廠
 */
public interface AbstractFactory {
    Car getCar(String type);
    
    Motorcycle getMotorCycle(String type);
}

3.6 創(chuàng)建具體工廠

package blog;

/**
 * 摩托車工廠
 */
public class MotorCycleFactory implements AbstractFactory {
    @Override
    public Car getCar(String type) {
        return null;
    }

    @Override
    public Motorcycle getMotorCycle(String type) {
        try {
            Class<?> aClass = Class.forName(type);
            return (Motorcycle) aClass.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

package blog;

/**
 * 汽車工廠
 */
public class CarFactory implements AbstractFactory {
    @Override
    public Car getCar(String type) {
        try {
            Class<?> aClass = Class.forName(type);
            return (Car)aClass.getDeclaredConstructor().newInstance();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public Motorcycle getMotorCycle(String type) {
        return null;
    }
}

3.7 創(chuàng)建工廠生成器

package blog;

/**
 * 工廠生成器
 */
public class FactoryProducer {
    public static AbstractFactory getFactory(String type) {
        if ("car".equals(type)) {
            return new CarFactory();
        }

        if ("motorcycle".equals(type)) {
            return new MotorCycleFactory();
        }

        return null;
    }
}

3.8 使用工廠生成器獲取工廠,通過工廠獲取產(chǎn)品

package blog;

public class AbstractFactoryDemo {
    public static void main(String[] args) {
        // 獲取汽車工廠
        AbstractFactory carFactory = FactoryProducer.getFactory("car");

        // 獲取suv
        Car suv = carFactory.getCar("blog.Suv");
        suv.drive();

        // 獲取mpv
        Car mpv = carFactory.getCar("blog.Mpv");
        mpv.drive();

        // 獲取摩托車工廠
        AbstractFactory motorcycleFactory = FactoryProducer.getFactory("motorcycle");

        // 獲取scooter
        Motorcycle scooter = motorcycleFactory.getMotorCycle("blog.Scooter");
        scooter.by();

        // 獲取UnderBone
        Motorcycle underBone = motorcycleFactory.getMotorCycle("blog.UnderBone");
        underBone.by();
    }
}

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

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

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

相關(guān)文章

  • 手寫Java設(shè)計(jì)模式之抽象工廠模式,附源碼解讀

    手寫Java設(shè)計(jì)模式之抽象工廠模式,附源碼解讀

    接上篇,抽象工廠模式將汽車的一些屬性可以抽象出來,可以理解為給不同汽車品牌生成時(shí)加上不同的特性,如顏色等,具體代碼如下: 引入顏色接口: 將顏色與汽車生成品牌抽象出來,增加抽象類: 繼承抽象類,分別對不同屬性的特征進(jìn)行操作,如涂上顏色等,首先實(shí)現(xiàn)

    2024年04月25日
    瀏覽(23)
  • [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

    [設(shè)計(jì)模式Java實(shí)現(xiàn)附plantuml源碼~創(chuàng)建型] 產(chǎn)品族的創(chuàng)建——抽象工廠模式

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

    2024年01月22日
    瀏覽(23)
  • 自學(xué)設(shè)計(jì)模式(簡單工廠模式、工廠模式、抽象工廠模式)

    使用工廠模式來生產(chǎn)某類對象(代碼簡化且容易維護(hù),類之間有血緣關(guān)系,可以通過工廠類進(jìn)行生產(chǎn)); 簡單工廠模式(用于創(chuàng)建簡單對象) 對于簡單工廠模式,需要的工廠類只有一個(gè); 在工廠類中的公共成員函數(shù)來創(chuàng)建所需對象; 工廠模式 簡單工廠模式會違反開放封閉

    2024年02月11日
    瀏覽(27)
  • 【設(shè)計(jì)模式】單例模式、工廠方法模式、抽象工廠模式

    1. 單例模式 (Singleton Pattern): 場景: 在一個(gè)應(yīng)用程序中,需要一個(gè)全局唯一的配置管理器,確保配置信息只有一個(gè)實(shí)例。 2. 工廠方法模式 (Factory Method Pattern): 場景: 創(chuàng)建一組具有相似功能但具體實(shí)現(xiàn)不同的日志記錄器。 3. 抽象工廠模式 (Abstract Factory Pattern): 場景: 創(chuàng)建不同

    2024年01月15日
    瀏覽(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)于在語法程度上對子類進(jìn)行了嚴(yán)格的定義限制,代碼的開發(fā)也就更加標(biāo)準(zhǔn)。下面具體介紹抽象類的概念。 普通類可以直

    2024年02月16日
    瀏覽(26)
  • 設(shè)計(jì)模式-抽象工廠模式

    抽象工廠模式:該模式是對工廠模式的拓展,因?yàn)楣S模式中創(chuàng)建的產(chǎn)品都需要繼承自同一個(gè)父類或接口,創(chuàng)建的產(chǎn)品類型相同,無法創(chuàng)建其他類型產(chǎn)品,所以抽象工廠模式對其進(jìn)行拓展,使其可以創(chuàng)建其他類型的產(chǎn)品。 手機(jī)產(chǎn)品 Pad產(chǎn)品 工廠 優(yōu)點(diǎn):創(chuàng)建的產(chǎn)品種類不單一

    2024年02月13日
    瀏覽(22)
  • 【設(shè)計(jì)模式】抽象工廠模式

    【設(shè)計(jì)模式】抽象工廠模式

    抽象工廠模式(Abstract Factory Pattern)是圍繞一個(gè)超級工廠創(chuàng)建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 在抽象工廠模式中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對象的工廠,不需要顯式指定它們的類。每個(gè)

    2024年02月13日
    瀏覽(28)
  • 設(shè)計(jì)模式 - 抽象工廠模式

    設(shè)計(jì)模式 - 抽象工廠模式

    學(xué)完工廠模式,才發(fā)現(xiàn)還有一個(gè)抽象工廠模式;學(xué)習(xí)后發(fā)現(xiàn)不論是通過接口方式、還是繼承方式,都可以使用抽象工廠模式;但是個(gè)人建議更多的時(shí)候,我們可以優(yōu)先考慮接口方式,畢竟 單繼承,多實(shí)現(xiàn) 設(shè)計(jì)模式分為三種類型,共23種 創(chuàng)建型模式:單例模式、工廠模式、抽

    2024年02月13日
    瀏覽(27)
  • 設(shè)計(jì)模式(三):抽象工廠模式

    設(shè)計(jì)模式(三):抽象工廠模式

    抽象工廠模式 (Abstract Factory Pattern)屬于創(chuàng)建型模式,是圍繞一個(gè)超級工廠創(chuàng)建其他工廠。該超級工廠又稱為其他工廠的工廠。 在 抽象工廠模式 中,接口是負(fù)責(zé)創(chuàng)建一個(gè)相關(guān)對象的工廠,不需要顯式指定它們的類。每個(gè)生成的工廠都能按照工廠模式提供對象。 通過使用 抽

    2024年04月25日
    瀏覽(22)
  • 設(shè)計(jì)模式(3)抽象工廠模式

    設(shè)計(jì)模式(3)抽象工廠模式

    一、介紹: 1、定義:提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。 2、組成結(jié)構(gòu): (1)抽象工廠角色:擔(dān)任這個(gè)角色的是工廠方法模式的核心,它是與應(yīng)用程序無關(guān)的。任何在模式中創(chuàng)建對象的工廠類必須實(shí)現(xiàn)這個(gè)接口。 (2)具體工廠角色

    2024年02月11日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包