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

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

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

設(shè)計模式系列文章

目錄

設(shè)計模式系列文章

前言

一、簡單工廠模式

二、工廠方法模式

三、抽象工廠模式

總結(jié)


前言

最近在學(xué)習(xí)一些Java設(shè)計模式的概念,設(shè)計模式誕生的目的,我認(rèn)為是可以使得寫出的代碼具有更好的邏輯性,減少了大量冗余代碼來進(jìn)行重復(fù)而繁瑣的操作,也更好的提升了復(fù)用性。所以學(xué)習(xí)并且能夠使用合理的設(shè)計模式可以讓我們的代碼更加美觀,優(yōu)雅,結(jié)構(gòu)更加清晰。

本次內(nèi)容對Java中的工廠模式進(jìn)行講解,工廠模式又可以分為三種

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ” 簡單工廠,工廠方法, 抽象工廠 ”


一、簡單工廠模式

工廠模式,主要用于創(chuàng)建對象時的一系列操作。

在我們平時創(chuàng)建對象的時候,一般使用New關(guān)鍵字來進(jìn)行創(chuàng)建。

ClassA?a?=?new?ClassA();
ClassB?b?=?new?ClassB();

?我們使用New關(guān)鍵字創(chuàng)建對象,會根據(jù)括號內(nèi)的參數(shù)在構(gòu)造函數(shù)里對實例化對象進(jìn)行初始化。

然而,我們創(chuàng)建一個對象的時候,可能需要對他進(jìn)行一些初始化操作,例如查詢數(shù)據(jù)庫,對屬性賦值等等。如果我們把這些操作也全部寫到構(gòu)造函數(shù)中。那構(gòu)造函數(shù)就變得很長很長,可讀性大大降低。

針對這種情況,我們可以引入 ” 工廠 “ 的概念,我們不通過New關(guān)鍵字去創(chuàng)建對象了,我們直接去創(chuàng)建一個工廠,讓工廠去幫我們創(chuàng)建對象。

例如,我們創(chuàng)建了一個專門生產(chǎn)手機(jī)的工廠,這個工廠可以生產(chǎn)梨子手機(jī),菠蘿手機(jī)。

那么首先我們要創(chuàng)建梨子手機(jī)和菠蘿手機(jī)這兩個類,這里我實現(xiàn)了一個Phone接口,表明梨子手機(jī)和菠蘿手機(jī)都是一個 ” Phone “類型的類,然后我們在創(chuàng)建的時候返回Phone類型的就可以了。

public interface Phone {
    void show();
}

public class LiPhone implements Phone {
    @Override
    public void show() {
        System.out.println("我是梨子手機(jī)");
    }
}

public class BoPhone implements Phone {
    @Override
    public void show(){
        System.out.println("我是菠蘿手機(jī)");
    }

}

?然后我們再創(chuàng)建一個手機(jī)工廠,來生產(chǎn)手機(jī)。

這里應(yīng)該很通俗易懂,我們再創(chuàng)建手機(jī)的時候,只需要給定規(guī)定好的number,工廠就知道該生產(chǎn)什么手機(jī)了,然后也可以按照我們的意愿去進(jìn)行初始化。

public class PhoneFactory{

    public Phone createPhone(Integer number) {
        Phone phone = null;
        if(number == 1){
            phone = new LiPhone();
            // .....
            // 梨子手機(jī)的初始化代碼
        }else if(number == 2){
            phone =  new BoPhone();
            // .....
            // 菠蘿的初始化代碼
        }
        return phone;
    }
}

然而這么做其實又會衍生出一個問題,那就是當(dāng)我們有很多牌子手機(jī)的時候,比如我們還有錘子手機(jī),番茄手機(jī),土豆手機(jī)。那我們每多一個手機(jī),就要去修改一次手機(jī)工廠的 if else?判斷,這違背了設(shè)計模式的一個原則 “ 對修改關(guān)閉,對拓展開啟 ”

(注:所謂面向?qū)ο蟮拈_放-封閉原則,就是在程序中對“擴(kuò)展”開放,對“修改”封閉。如果每次業(yè)務(wù)改動都要增加新的if-else,就涉及對舊有代碼的修改,不但容易出錯,可讀性也不好。)

那么怎么解決呢,我們可以使用下面提到的工廠方法模式。

二、工廠方法模式

前面我們提到,為了解決簡單工廠模式中通過工廠創(chuàng)建對象 if esle 語句過多的問題可以使用工廠方法模式。而工廠方法模式的主要原理就是,我們把每一個要創(chuàng)建的產(chǎn)品對象獨立分配一個工廠,提取一個工廠接口出來,獨立分配的工廠作為工廠接口的實現(xiàn)類,這樣我們在創(chuàng)建工廠——再通過工廠創(chuàng)建對象的過程中,工廠就是唯一確定了的,所以創(chuàng)建的對象也是唯一確定的,不需要再使用過多的判斷語句了。

所以我們對之前的工廠類進(jìn)行修改先.

現(xiàn)在我們提取出了一個工廠接口,接口中有生產(chǎn)手機(jī)的方法,然后我們?yōu)槔孀邮謾C(jī)和菠蘿手機(jī)都創(chuàng)建一個工廠類去實現(xiàn)接口,在實現(xiàn)類的 createPhone 方法中創(chuàng)建手機(jī),這樣如果我們以后有了其他手機(jī),只需要再增加手機(jī)的工廠類去實現(xiàn)接口就可以了。

public interface PhoneFactory {
    Phone createPhone();
}

public class LiFactory implements PhoneFactory{

    @Override
    public Phone createPhone() {
        Phone phone =  new LiPhone();
        // .....
        // 初始化代碼
        return phone;
    }
}

public class BoFactory implements PhoneFactory{

    @Override
    public Phone createPhone() {
        Phone phone =  new BoPhone();
        // .....
        //  初始化代碼
        return phone;
    }
}

測試方法

public class Test {

    public static void main(String[] args) {
        PhoneFactory factoryA = new LiFactory();
        PhoneFactory factoryB = new BoFactory();
        Phone phoneA = factoryA.createPhone();
        Phone phoneB = factoryB.createPhone();
        phoneA.show();
        phoneB.show();
    }
}

?輸出:

我是梨子手機(jī)

我是菠蘿手機(jī)

那么,?其實我們可以顯而易見的發(fā)現(xiàn),工廠方法模式雖然可以確保我們每一個手機(jī)對應(yīng)一個工廠,而且需要創(chuàng)建手機(jī)的時候只需要通過對應(yīng)工廠創(chuàng)建就可以了,但是這樣隨著我們的產(chǎn)品越來越多,工廠的實現(xiàn)類也越來越多,看的人頭都暈了。

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

那么,我們可以使用 “ 抽象工廠 ”模式來解決這個問題。比如我們的梨子手機(jī)和菠蘿手機(jī)分別來自梨子廠和菠蘿廠。那梨子廠和菠蘿廠它們也有遠(yuǎn)大的理想??!他們不想只做手機(jī)! 他們要搞吧來福,搞把AK,做大做強(qiáng)!

梨子廠要做手機(jī)和電腦,菠蘿見狀,心想那我指定也得卷起來啊,于是菠蘿老板下令,我們也要做手機(jī)和電腦!

三、抽象工廠模式

從上面的情景我們可以分析得到,梨子廠和菠蘿廠都不甘現(xiàn)狀,他們不禁想做手機(jī),還想做電腦。

那我們需要去創(chuàng)建一個手機(jī)廠的同時再去創(chuàng)建一個電腦廠嗎??

那當(dāng)然不需要了,我們可以創(chuàng)建一個工廠接口,這個工廠既可以做手機(jī),又可以做電腦

我們再創(chuàng)建實現(xiàn)類工廠,梨子廠和菠蘿廠。因為梨子廠和菠蘿廠都實現(xiàn)了工廠接口,所以他們都有創(chuàng)建手機(jī)和電腦的流水線(方法)

那就簡單了,我們在各自的流水線中創(chuàng)建自己的產(chǎn)品不就行了嘛

直接上代碼??!

哦不 先上個圖 畫的丑陋,帥哥美女們將就看看

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

上代碼?。。?/span>

首先安排兩個產(chǎn)品的接口,手機(jī)接口和電腦接口,以及他們的實現(xiàn)類。

public interface Phone {
    void showPhone();
}

public class LiPhone implements Phone {
    @Override
    public void showPhone(){
        System.out.println("我是梨子手機(jī)");
    }
}

public class BoPhone implements Phone {
    @Override
    public void showPhone(){
        System.out.println("我是菠蘿手機(jī)");
    }
}

public interface Computer {
    void showComputer();
}

public class LiComputer implements Computer {
    @Override
    public void showComputer() {
        System.out.println("我是梨子電腦");
    }
}

public class BoComputer implements Computer {
    @Override
    public void showComputer() {
        System.out.println("我是菠蘿電腦");
    }
}

然后再安排一下我們的重頭戲,抽象工廠。

public interface IFactory {
    //創(chuàng)建口罩
    Phone createPhone();
    //創(chuàng)建防護(hù)服
    Computer createComputer();
}

public class LiFactory implements IFactory {
    @Override
    public Phone createPhone() {
        Phone phone =  new LiPhone();
        // .....
        //  初始化代碼
        return phone;
    }

    @Override
    public Computer createComputer() {
        Computer computer =  new LiComputer();
        // .....
        // 初始化代碼
        return computer;
    }
}

public class BoFactory implements IFactory {
    @Override
    public Phone createPhone() {
        Phone phone =  new BoPhone();
        // .....
        //  初始化代碼
        return phone;
    }

    @Override
    public Computer createComputer() {
        Computer computer =  new BoComputer();
        // .....
        // 初始化代碼
        return computer;
    }
}

?最后測試一下來看看

public class Test {

    public static void main(String[] args) {
        IFactory factoryA = new LiFactory();
        IFactory factoryB = new BoFactory();
        //創(chuàng)建低端口罩
        Phone phoneA = factoryA.createPhone();
        //創(chuàng)建高端口罩
        Phone phoneB = factoryB.createPhone();
        //創(chuàng)建低端防護(hù)服
        Computer computerA = factoryA.createComputer();
        //創(chuàng)建高端防護(hù)服
        Computer computerB = factoryB.createSuit();

        phoneA.showPhone();
        phoneB.showPhone();
        computerA.showComputer();
        computerB.showComputer();
    }
}

?輸出:

我是梨子手機(jī)

我是菠蘿手機(jī)

我是梨子電腦

我是菠蘿電腦

大功告成~ ???


總結(jié)

現(xiàn)在越來越多Java開發(fā)方面的工作在招聘的要求上都會要求應(yīng)聘者要熟知常見的設(shè)計模式,以及在面試的過程中也經(jīng)常會問道設(shè)計模式相關(guān)的知識,所以設(shè)計模式的學(xué)習(xí)是非常重要的,而且學(xué)習(xí)了還要會融會貫通,在寫代碼的時候,遇到有重復(fù)的代碼就可以思考一下是否可以將重復(fù)的代碼抽取出來進(jìn)行封裝或者其他操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-411848.html

到了這里,關(guān)于Java設(shè)計模式——工廠模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java設(shè)計模式-抽象工廠模式

    設(shè)計模式是軟件設(shè)計中的一種常見方法,通過定義一系列通用的解決方案,來解決常見的軟件設(shè)計問題。其中,抽象工廠模式是一種非常常見的設(shè)計模式,它可以幫助我們創(chuàng)建一組相關(guān)的對象,而不需要指定具體的實現(xiàn)方式。 抽象工廠模式是一種創(chuàng)建型設(shè)計模式,它提供了一

    2024年02月01日
    瀏覽(24)
  • Java設(shè)計模式 (二) 工廠模式

    什么是工廠模式? 工廠模式是一種創(chuàng)建型設(shè)計模式,它提供了一種統(tǒng)一的方式來創(chuàng)建對象,隱藏了對象的創(chuàng)建細(xì)節(jié),使客戶端代碼與具體類的實例化過程解耦。工廠模式可以幫助您在不暴露對象創(chuàng)建細(xì)節(jié)的情況下實例化對象,從而提高代碼的靈活性和可維護(hù)性。 工廠模式通常

    2024年02月12日
    瀏覽(22)
  • java設(shè)計模式【工廠方法模式】

    java設(shè)計模式【工廠方法模式】

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

    2024年02月05日
    瀏覽(30)
  • java設(shè)計模式【抽象工廠模式】

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

    抽象工廠模式 是對簡單工廠模式的一個變種,它允許通過一個統(tǒng)一的接口來創(chuàng)建不同的產(chǎn)品實例,而無需指定具體的子類。在這個模式中,我們只關(guān)心產(chǎn)品的抽象接口,而將具體的產(chǎn)品實現(xiàn)留給子類去實現(xiàn)。這樣,我們可以通過創(chuàng)建不同的工廠對象來創(chuàng)建不同的產(chǎn)品實例,而

    2024年02月05日
    瀏覽(31)
  • Java設(shè)計模式---單例 工廠 代理模式

    單例模式是設(shè)計模式中的一種,屬于創(chuàng)建型模式。在軟件工程中,單例模式確保一個類只有一個實例,并提供一個全局訪問點。這種模式常用于那些需要頻繁實例化然后引用,且創(chuàng)建新實例的開銷較大的類,例如數(shù)據(jù)庫連接池、緩存管理等。 意圖 :保證一個類僅有一個實例

    2024年01月24日
    瀏覽(28)
  • 【java設(shè)計模式】創(chuàng)建型模式介紹(工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式)

    簡介 本文介紹Java設(shè)計模式中創(chuàng)建型模式的五種 一、工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。 工廠模式提供了一種將對象的實例化過程封裝在工廠類中的方式。通過使用工

    2024年02月16日
    瀏覽(24)
  • Java工廠設(shè)計模式

    工廠設(shè)計模式是一種創(chuàng)建型設(shè)計模式,它允許你創(chuàng)建對象,但不暴露其創(chuàng)建邏輯。該模式定義了一個工廠類,該類負(fù)責(zé)創(chuàng)建對象。這樣,客戶端代碼只需知道如何與工廠交互,而不必知道對象的實際創(chuàng)建方式。 下面是工廠設(shè)計模式的通用結(jié)構(gòu):

    2024年02月07日
    瀏覽(19)
  • Java與設(shè)計模式(2):工廠方法模式

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

    2024年02月11日
    瀏覽(17)
  • Java 基礎(chǔ):設(shè)計模式之工廠方法模式

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

    2024年04月29日
    瀏覽(25)
  • Java與設(shè)計模式(1):簡單工廠模式

    簡單工廠模式(Simple Factory Pattern)是一種創(chuàng)建型設(shè)計模式,它提供了一種創(chuàng)建對象的方式,將對象的創(chuàng)建邏輯封裝在一個工廠類中,而不是直接在客戶端代碼中進(jìn)行實例化。 在簡單工廠模式中,有三個主要角色: 工廠類(Factory Class):負(fù)責(zé)創(chuàng)建具體對象的工廠類。它通常包

    2024年02月11日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包