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

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

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

1.工廠方法是什么

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

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

2.如何實現(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.代碼實現(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 {
    /**
     * 對外提供產(chǎn)品的抽象方法
     * @return
     */
    public abstract Tyre getTyre();
}

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

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

5)測試類

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

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

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

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

5.拓展

工廠模式在Java集合框架中的應用案例

        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接口中定義了一個 iterator方法,返回Iterator接口的實例。

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

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

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

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

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

相關(guān)文章

  • java執(zhí)行SQL語句實現(xiàn)查詢的通用方法詳解

    java執(zhí)行SQL語句實現(xiàn)查詢的通用方法詳解

    這篇文章主要介紹了java執(zhí)行SQL語句實現(xiàn)查詢的通用方法詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • 使用FeignClient設(shè)置動態(tài)Url

    使用FeignClient設(shè)置動態(tài)Url

    這篇文章主要介紹了使用FeignClient設(shè)置動態(tài)Url方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 關(guān)于Java Interface接口的簡單練習題

    關(guān)于Java Interface接口的簡單練習題

    這篇文章主要給大家分享的是關(guān)于Java Interface接口的簡單練習題,難度不算大,但是要有一個清晰的邏輯建立接口和鏈接Java類。下面來看看文章的詳細介紹吧,需要的朋友可以參考一下
    2021-11-11
  • HttpServletRequest對象方法的用法小結(jié)

    HttpServletRequest對象方法的用法小結(jié)

    HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協(xié)議訪問服務器時,HTTP請求頭中的所有信息都封裝在這個對象中,開發(fā)人員通過這個對象的相關(guān)方法,即可以獲得客戶的這些信息
    2017-03-03
  • 深入理解Java嵌套類和內(nèi)部類

    深入理解Java嵌套類和內(nèi)部類

    本篇文章主要介紹了深入理解Java嵌套類和內(nèi)部類,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java的字符串常量池StringTable詳解

    Java的字符串常量池StringTable詳解

    這篇文章主要介紹了Java的字符串常量池StringTable詳解,JVM為了提高性能和減少內(nèi)存開銷,在實例化字符串常量的時候進行了一些優(yōu)化,為 了減少在JVM中創(chuàng)建的字符串的數(shù)量,字符串類維護了一個字符串池,需要的朋友可以參考下
    2023-11-11
  • Mybatis自定義typeHandle過程解析

    Mybatis自定義typeHandle過程解析

    這篇文章主要介紹了Mybatis自定義typeHandle過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 使用@Valid 校驗嵌套對象

    使用@Valid 校驗嵌套對象

    這篇文章主要介紹了使用@Valid 校驗嵌套對象方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決ThingsBoard編譯報錯問題:Failure?to?find?org.gradle:gradle-tooling-api:jar:6.3

    解決ThingsBoard編譯報錯問題:Failure?to?find?org.gradle:gradle-too

    這篇文章主要介紹了ThingsBoard編譯報錯:Failure?to?find?org.gradle:gradle-tooling-api:jar:6.3,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • 詳解Java中的線程模型與線程調(diào)度

    詳解Java中的線程模型與線程調(diào)度

    這篇文章主要介紹了詳解Java中的線程模型與線程調(diào)度的相關(guān)資料,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2021-02-02

最新評論

江门市| 淮滨县| 遵义市| 东安县| 新津县| 屏东县| 荆州市| 三原县| 临夏县| 长子县| 扬州市| 罗甸县| 固镇县| 英吉沙县| 乌苏市| 张家界市| 中山市| 津市市| 岳阳县| 班玛县| 洛阳市| 修水县| 尼勒克县| 广饶县| 石泉县| 新建县| 平山县| 桓台县| 壤塘县| 且末县| 含山县| 三台县| 阿克陶县| 郑州市| 田林县| 宾川县| 微博| 漠河县| 鹤壁市| 黎川县| 泉州市|