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

Java設(shè)計(jì)模式之工廠方法模式詳解

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

1.工廠方法是什么

眾所周知,工廠是生產(chǎn)產(chǎn)品的,并且產(chǎn)品供消費(fèi)者使用。消費(fèi)者不必關(guān)心產(chǎn)品的生產(chǎn)過程,只需要關(guān)心用哪種產(chǎn)品就行。

在Java世界中,工廠方法模式和現(xiàn)實(shí)功能類似。工廠即一個(gè)工廠類,提供獲得對(duì)象(產(chǎn)品)的方法(工廠方法)。其他類(消費(fèi)者)需要用到某個(gè)對(duì)象時(shí),只需調(diào)用工廠方法就行,不必new這個(gè)對(duì)象。

2.如何實(shí)現(xiàn)

1)創(chuàng)建產(chǎn)品的抽象類或接口---抽象產(chǎn)品

2)創(chuàng)建具體產(chǎn)品的類---具體產(chǎn)品

3)創(chuàng)建工廠的抽象類或接口---抽象構(gòu)造類

4)創(chuàng)建具體工廠類---具體構(gòu)造類

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

     比如想要獲得車的參數(shù)信息,輪胎信息等。

1)抽象產(chǎn)品

/**
 * 產(chǎn)品抽象類
 */
public abstract class Tyre {
    String name;
    public abstract void getName();
}

2)具體產(chǎn)品

/**
 * 具體產(chǎn)品
 */
public class MichelinTyre extends Tyre {
    MichelinTyre(){
        name = "米其林輪胎";
    }
    @Override
    public void getName() {
        System.out.println("car name :"+name);
    }
}

3)抽象構(gòu)造類

/**
 * 抽象構(gòu)造類
 */
public abstract class Car {
    /**
     * 對(duì)外提供產(chǎn)品的抽象方法
     * @return
     */
    public abstract Tyre getTyre();
}

4)具體構(gòu)造類

/**
 * 具體構(gòu)造類
 */
public class BydCar extends Car {
    /**
     * 對(duì)外提供獲得對(duì)象的方法。
     * 當(dāng)用戶想要獲得某個(gè)產(chǎn)品時(shí),可以通過相應(yīng)的工廠方法來獲取,而不是直接通過new的方式。
     * 優(yōu)點(diǎn):避免用戶通過new來獲取對(duì)象,讓用戶代碼和產(chǎn)品代碼解耦。
     * @return
     */
    @Override
    public Tyre getTyre() {
        return new MichelinTyre();
    }
}

5)測(cè)試類

/**
 * 測(cè)試類
 */
public class Main {
    public static void main(String args []){
        Tyre tyre;
        Car car = new BydCar();
        tyre = car.getTyre();
        tyre.getName();
    }
}

4.工廠方法模式的優(yōu)點(diǎn)

1)可以讓用戶代碼和某個(gè)特定對(duì)象的子類的代碼解耦

2)用戶不必關(guān)心他所使用的對(duì)象是如何創(chuàng)建的,只需要知道該對(duì)象有哪些方法可供調(diào)用即可。

5.拓展

工廠模式在Java集合框架中的應(yīng)用案例

        Collection<Integer> list = new LinkedList<Integer>();
        for(int i = 0;i<5;i++){
            list.add(i);
        }
        Iterator<Integer> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

在Collection接口中定義了一個(gè) iterator方法,返回Iterator接口的實(shí)例。

   Iterator接口----抽象產(chǎn)品

   Iterator的實(shí)現(xiàn)類---具體產(chǎn)品

   Collection接口---抽象構(gòu)造

  LinkedList鏈表類--具體構(gòu)造類

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

相關(guān)文章

  • java根據(jù)模板導(dǎo)出PDF的詳細(xì)實(shí)現(xiàn)過程

    java根據(jù)模板導(dǎo)出PDF的詳細(xì)實(shí)現(xiàn)過程

    前段時(shí)間因?yàn)橄嚓P(guān)業(yè)務(wù)需求需要后臺(tái)生成pdf文件,所以下面這篇文章主要給大家介紹了關(guān)于java根據(jù)模板導(dǎo)出PDF的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • IDEA插件EasyCode及MyBatis最優(yōu)配置步驟詳解

    IDEA插件EasyCode及MyBatis最優(yōu)配置步驟詳解

    這篇文章主要介紹了IDEA插件EasyCode MyBatis最優(yōu)配置步驟詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • springboot設(shè)置了server.port但是沒有用,還是8080問題

    springboot設(shè)置了server.port但是沒有用,還是8080問題

    這篇文章主要介紹了springboot設(shè)置了server.port但是沒有用,還是8080問題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • VSCode+Gradle搭建Java開發(fā)環(huán)境實(shí)現(xiàn)

    VSCode+Gradle搭建Java開發(fā)環(huán)境實(shí)現(xiàn)

    這篇文章主要介紹了VSCode+Gradle搭建Java開發(fā)環(huán)境實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java語言中&&與& ||與|的區(qū)別是什么

    Java語言中&&與& ||與|的區(qū)別是什么

    這篇文章主要介紹了Java語言中&&與& ||與|的區(qū)別是什么的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java中HashMap和Hashtable及HashSet的區(qū)別

    Java中HashMap和Hashtable及HashSet的區(qū)別

    以下是對(duì)Java中HashMap和Hashtable及HashSet的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • Java并發(fā)volatile可見性的驗(yàn)證實(shí)現(xiàn)

    Java并發(fā)volatile可見性的驗(yàn)證實(shí)現(xiàn)

    這篇文章主要介紹了Java并發(fā)volatile可見性的驗(yàn)證實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • java批量插入數(shù)據(jù)的幾種方法

    java批量插入數(shù)據(jù)的幾種方法

    這篇文章主要給大家介紹了關(guān)于java批量插入數(shù)據(jù)的幾種方法,大家在Java項(xiàng)目中經(jīng)常會(huì)出現(xiàn)大量向數(shù)據(jù)庫中插入的情況,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場(chǎng)景

    淺談Java中BIO、NIO和AIO的區(qū)別和應(yīng)用場(chǎng)景

    這篇文章主要介紹了Java中BIO、NIO和AIO的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • java?spring?mvc處理器映射器介紹

    java?spring?mvc處理器映射器介紹

    這篇文章主要介紹了java?spring?mvc處理器映射器,文章圍繞equestMapping解析映射介紹展開源碼內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03

最新評(píng)論