最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式(Abstract?Factory)

 更新時(shí)間:2022年09月23日 10:12:49   作者:丨Jack_Chen丨  
當(dāng)系統(tǒng)所提供的工廠所需生產(chǎn)的具體產(chǎn)品并不是一個(gè)簡(jiǎn)單的對(duì)象,而是多個(gè)位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中屬于不同類(lèi)型的具體產(chǎn)品時(shí)需要使用抽象工廠模式,抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)

抽象工廠模式

概述

抽象工廠模式(Abastract Factory Pattern)屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。

它提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口,無(wú)須顯式指定他們具體的類(lèi)。每個(gè)生成的工廠都能按照工廠模式提供對(duì)象。

抽象工廠模式是圍繞一個(gè)超級(jí)工廠創(chuàng)建其他工廠,該超級(jí)工廠又稱(chēng)為其他工廠的工廠。

產(chǎn)品等級(jí)結(jié)構(gòu)與產(chǎn)品族

抽象工廠模式是工廠方法模式的加強(qiáng)版。工廠方法模式針對(duì)一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),而抽象工廠模式面對(duì)多個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),一個(gè)工廠角色可以負(fù)責(zé)多個(gè)不同產(chǎn)品等級(jí)結(jié)構(gòu)中的產(chǎn)品對(duì)象的創(chuàng)建 。

產(chǎn)品等級(jí)結(jié)構(gòu)

產(chǎn)品等級(jí)結(jié)構(gòu)即產(chǎn)品的繼承結(jié)構(gòu),如一個(gè)車(chē)輛抽象類(lèi),其子類(lèi)有BM汽車(chē)、AD汽車(chē)等,則抽象車(chē)輛與具體品牌的車(chē)輛之間形成了一個(gè)產(chǎn)品等級(jí)結(jié)構(gòu),抽象車(chē)輛類(lèi)是父類(lèi),而具體品牌的工廠類(lèi)是子類(lèi)。

產(chǎn)品族

產(chǎn)品族是指由同一個(gè)工廠生產(chǎn)的,位于不同產(chǎn)品等級(jí)結(jié)構(gòu)中的一組產(chǎn)品,如BM工廠生成的BM車(chē)輪、BM車(chē)架等組成一個(gè)產(chǎn)品族。這幾個(gè)產(chǎn)品屬于不同的產(chǎn)品等級(jí)結(jié)構(gòu),但由同一個(gè)工廠創(chuàng)建。

一系列相關(guān)產(chǎn)品, 如椅子 、 沙發(fā)和咖啡桌

系列產(chǎn)品的不同變體。 如現(xiàn)代、 ? 維多利亞 、 ? 裝飾風(fēng)藝術(shù)等風(fēng)格生成椅子、沙發(fā)和咖啡桌

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

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

當(dāng)一個(gè)產(chǎn)品族中的多個(gè)對(duì)象被設(shè)計(jì)成一起工作時(shí),它能保證客戶(hù)端始終只使用同一個(gè)產(chǎn)品族中的對(duì)象。

缺點(diǎn):

產(chǎn)品族擴(kuò)展非常困難,要增加一個(gè)系列的某一產(chǎn)品,既要在抽象的 Creator 里加代碼,又要在具體的里面加代碼

主要角色

1.抽象產(chǎn)品角色(AbstractProduct)

它是工廠方法模式所創(chuàng)建的對(duì)象的父類(lèi),或它們共同擁有的接口。

2.具體產(chǎn)品角色(ConcreteProduct)

抽象工廠模式所創(chuàng)建的任何產(chǎn)品對(duì)象都是某一個(gè)具體產(chǎn)品類(lèi)的實(shí)例。

3.抽象工廠角色(AbstractFactory)

它是工廠方法模式的核心,它與應(yīng)用程序無(wú)關(guān)。

4.具體工廠角色(ConcreteFactory)

它直接在客戶(hù)端的調(diào)用下創(chuàng)建產(chǎn)品的實(shí)例。

抽象工廠模式的基本使用

創(chuàng)建抽象產(chǎn)品

創(chuàng)建抽象產(chǎn)品角色,工廠類(lèi)所創(chuàng)建的產(chǎn)品的父類(lèi),封裝了產(chǎn)品對(duì)象的公共方法

public interface IWheel {
    void create(String name);
}
public interface IFrame {
    void create(String name);
}

創(chuàng)建具體產(chǎn)品

創(chuàng)建一系列相關(guān)的產(chǎn)品對(duì)象,如創(chuàng)建BMCar產(chǎn)品族,擴(kuò)展一系列相關(guān)產(chǎn)品對(duì)象。

public class CarWheel implements IWheel{
    @Override
    public void create(String name) {
        System.out.println("制造"+name+"車(chē)輪");
    }
}
public class CarFrame implements IFrame {
    @Override
    public void create(String name) {
        System.out.println("制造"+name+"車(chē)架");
    }
}

創(chuàng)建抽象工廠

創(chuàng)建抽象工廠,提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴(lài)對(duì)象的接口

public abstract class CarFactory {
    /**
     * 制造車(chē)輪產(chǎn)品
     */
   protected abstract  IWheel createWheel();

    /**
     * 制造車(chē)架產(chǎn)品
     */
   protected abstract  IFrame createFrame();
}

創(chuàng)建具體工廠

創(chuàng)建具體產(chǎn)品工廠,提供一個(gè)產(chǎn)品類(lèi)的庫(kù)

public class BMCarFactory extends CarFactory {
    @Override
    protected IWheel createWheel() {
        return new CarWheel();
    }
    @Override
    protected IFrame createFrame() {
        return new CarFrame();
    }
}
public class ADCarFactory extends CarFactory {
    @Override
    protected IWheel createWheel() {
        return new CarWheel();
    }
    @Override
    protected IFrame createFrame() {
        return new CarFrame();
    }
}

客戶(hù)端執(zhí)行

    public static void main(String[] args) {
        BMCarFactory bmCarFactory = new BMCarFactory();
        bmCarFactory.createFrame().create("BM");
        bmCarFactory.createWheel().create("BM");
        ADCarFactory adCarFactory = new ADCarFactory();
        adCarFactory.createFrame().create("AD");
        adCarFactory.createWheel().create("AD");
    }

制造BM車(chē)架
制造BM車(chē)輪
制造AD車(chē)架
制造AD車(chē)輪

到此這篇關(guān)于Java創(chuàng)建型設(shè)計(jì)模式之抽象工廠模式(Abstract Factory)的文章就介紹到這了,更多相關(guān)Java抽象工廠模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng)

    java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)學(xué)生教師管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解

    Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解

    通過(guò)@ConfigurationProperties注解,可以將外部配置文件中的屬性值注入到JavaBean中,簡(jiǎn)化了配置屬性的讀取和管理,這使得SpringBoot應(yīng)用程序中配置文件的屬性值可以映射到POJO類(lèi)中,實(shí)現(xiàn)類(lèi)型安全的屬性訪問(wèn),此方法避免了手動(dòng)讀取配置文件屬性的需要
    2024-10-10
  • Java CharacterEncodingFilter案例詳解

    Java CharacterEncodingFilter案例詳解

    這篇文章主要介紹了Java CharacterEncodingFilter案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • InteliJ IDEA 設(shè)置eclipse快捷鍵 的圖文教程

    InteliJ IDEA 設(shè)置eclipse快捷鍵 的圖文教程

    本文通過(guò)圖文并茂的形式給大家介紹了InteliJ IDEA 設(shè)置eclipse快捷鍵 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下
    2018-06-06
  • springboot + mybatis配置多數(shù)據(jù)源示例

    springboot + mybatis配置多數(shù)據(jù)源示例

    本篇文章主要介紹了springboot + mybatis配置多數(shù)據(jù)源示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-03-03
  • Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案

    Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案

    這篇文章主要給大家介紹了關(guān)于Java異常:java.net.UnknownHostException產(chǎn)生的原因和解決方案,這個(gè)異常是java.net包中的一部分,具體說(shuō)它是類(lèi)的一個(gè)實(shí)例,異常通常是由主機(jī)名無(wú)法解析為IP地址引起的,文中將解決的辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • SpringBoot實(shí)現(xiàn)前后端、json數(shù)據(jù)交互以及Controller接收參數(shù)的幾種常用方式

    SpringBoot實(shí)現(xiàn)前后端、json數(shù)據(jù)交互以及Controller接收參數(shù)的幾種常用方式

    這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)前后端、json數(shù)據(jù)交互以及Controller接收參數(shù)的幾種常用方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 動(dòng)態(tài)代理模擬實(shí)現(xiàn)aop的示例

    動(dòng)態(tài)代理模擬實(shí)現(xiàn)aop的示例

    下面小編就為大家?guī)?lái)一篇?jiǎng)討B(tài)代理模擬實(shí)現(xiàn)aop的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望對(duì)大家有所幫助
    2017-11-11
  • JAVA多線程搶紅包的實(shí)現(xiàn)示例

    JAVA多線程搶紅包的實(shí)現(xiàn)示例

    這篇文章主要介紹了JAVA多線程搶紅包的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論

永城市| 资阳市| 大名县| 宁都县| 兴仁县| 阳西县| 华坪县| 卢氏县| 诏安县| 乌兰察布市| 棋牌| 玉树县| 无锡市| 五大连池市| 洛宁县| 铁岭县| 阿拉善左旗| 即墨市| 高碑店市| 江孜县| 南陵县| 海林市| 水富县| 衡南县| 清流县| 韩城市| 延寿县| 唐山市| 丽江市| 科技| 龙胜| 长宁县| 乐东| 霍林郭勒市| 大理市| 乌海市| 西乡县| 三河市| 西充县| 革吉县| 镇坪县|