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

Java工廠模式的使用細(xì)則介紹

 更新時(shí)間:2023年02月21日 08:41:53   作者:綠仔牛奶_  
工廠模式,是一種實(shí)例化對(duì)象的方式,只要輸入需要實(shí)例化對(duì)象的名字,就可以通過(guò)工廠對(duì)象的相應(yīng)工廠函數(shù)來(lái)制造你需要的對(duì)象

工廠模式

工廠模式顧名思義就是生產(chǎn)實(shí)例的工廠,使用工廠模式不會(huì)在程序中使用new關(guān)鍵字創(chuàng)建實(shí)例。而是將創(chuàng)建對(duì)象的細(xì)節(jié)隱藏,對(duì)外提供統(tǒng)一的方法,外部通過(guò)該方法獲取實(shí)例。以此降低調(diào)用者與程序之間的耦合性,更加靈活

工廠模式可以分為三類

  • 簡(jiǎn)單工廠模式
  • 工廠方法模式
  • 抽象工廠模式

簡(jiǎn)單工廠模式

定義一個(gè)接口,將創(chuàng)建對(duì)象和其本身的業(yè)務(wù)分離解耦,如下示例:

public interface Pet {
    void shout();
}
public class Cat implements Pet{
    public void shout() {
        System.out.println("貓叫");
    }
}
public class Dog implements Pet{
    public void shout() {
        System.out.println("狗叫");
    }
}
// 寵物工廠
public class PetFactory {
    // 方式一
    public static Pet getPet(String pet) {
        if (pet.equals("小貓")) {
            return new Cat();
        } else if (pet.equals("小狗")) {
            return new Dog();
        } else {
            return null;
        }
    }
    // 方式二
    public static Pet getCat(){
        return new Cat();
    }
    public static Pet getDog(){
        return new Dog();
    }
}
// 用戶類
public class Customer {
    public static void main(String[] args) {
        Pet pet = PetFactory.getPet("小貓");
        pet.shout();
    }
}
// 輸出 : 貓叫

如上述代碼所示,創(chuàng)建對(duì)象只需要直接調(diào)用PetFactory工廠的創(chuàng)建方法即可,根據(jù)用戶需求來(lái)創(chuàng)建指定對(duì)象,執(zhí)行對(duì)應(yīng)方法

工廠方法模式

工廠方法模式相對(duì)于簡(jiǎn)單工廠,提高了拓展性,可以在不影響原有類的情況下實(shí)現(xiàn)橫向擴(kuò)展其他類,但是代碼量加大,可能會(huì)產(chǎn)生更多的代碼冗余。

我們針對(duì)每一個(gè)類都為其設(shè)置單獨(dú)的工廠,即每個(gè)工廠只生產(chǎn)一種類型,如果在需要新增其他類型那么只需要?jiǎng)?chuàng)建其工廠提供獲取實(shí)例方法即可

public interface Pet {
    void shout();
}
public class Cat implements Pet {
    public void shout() {
        System.out.println("貓叫");
    }
}
public class CatFactory {
    public static Pet getCat(){
        return new Cat();
    }
}
public class Customer {
    public static void main(String[] args) {
        Pet cat = CatFactory.getCat();
        cat.shout();
    }
}

使用工廠方法模式可以再不修改原有代碼的基礎(chǔ)上繼續(xù)擴(kuò)展,但是工作量較大

對(duì)比簡(jiǎn)單工廠和工廠方法模式:就代碼和結(jié)構(gòu)的復(fù)雜度,使用簡(jiǎn)單工廠模式更加簡(jiǎn)便,但是對(duì)于可拓展性則工廠方法模式更加優(yōu)越

抽象工廠模式

抽象工廠用于常見(jiàn)一系列相關(guān)對(duì)象的家族,抽象的意思是,我們會(huì)定義一個(gè)工廠接口并且不做任何實(shí)現(xiàn),只用來(lái)約束它的實(shí)現(xiàn)工廠生產(chǎn)產(chǎn)品的規(guī)范。

四大核心:抽象工廠、具體工廠、抽象產(chǎn)品、具體產(chǎn)品

以華為、小米生產(chǎn)手機(jī)和電視為例:

代碼如下:

// 工廠接口
public interface ProductFactory {
    RouterProduct getRouter();  // 生產(chǎn)路由器
    PhoneProduct getPhone();   // 生產(chǎn)手機(jī)
}
// 手機(jī)、路由器接口
public interface PhoneProduct { void close();}
public interface RouterProduct {void start();}
// 工廠
public class HuaweiFactory implements ProductFactory{
  public RouterProduct getRouter() {return new HuaweiRouter();}
  public PhoneProduct getPhone() {
    return new HuaweiPhone();
  }
}
public class XiaoMiFactory implements ProductFactory{
  public RouterProduct getRouter() {
    return new XiaoMiRouter();
  }
  public PhoneProduct getPhone() {
    return new XiaoMiPhone();
  }
}
// 測(cè)試
public static void main(String[] args) {
  // 拿到工廠對(duì)象
  XiaoMiFactory miFactory = new XiaoMiFactory();
  HuaweiFactory huaweiFactory = new HuaweiFactory();
  // 小米工廠生產(chǎn)
  PhoneProduct miFactoryPhone = miFactory.getPhone();
  miFactoryPhone.close();
  RouterProduct router = miFactory.getRouter();
  router.start();
  // 華為工廠生產(chǎn)
  PhoneProduct phone = huaweiFactory.getPhone();
  phone.close();
  RouterProduct router1 = huaweiFactory.getRouter();
  router1.start();
}

還有其他的產(chǎn)品接口實(shí)現(xiàn)類,華為手機(jī)、小米手機(jī)、華為路由器等等

同樣的抽象工廠模式也可以進(jìn)行擴(kuò)展但是比較繁瑣,需要再頂級(jí)工廠也就是工廠接口中去擴(kuò)展,但是擴(kuò)展之后其所有的實(shí)現(xiàn)類也都需要完成實(shí)現(xiàn)。如果是長(zhǎng)期穩(wěn)定狀態(tài)下可以這樣擴(kuò)展,但是經(jīng)常改動(dòng)的話抽象工廠模式就顯得非常雞肋

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

相關(guān)文章

  • 詳解Java線程中斷知識(shí)點(diǎn)

    詳解Java線程中斷知識(shí)點(diǎn)

    在本篇文章中我們給大家分享了關(guān)于Java線程中斷的相關(guān)知識(shí)點(diǎn)內(nèi)容以及相關(guān)代碼實(shí)例,有興趣的朋友們可以學(xué)習(xí)下。
    2018-09-09
  • 解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問(wèn)題

    解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問(wèn)題

    這篇文章主要介紹了解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Java線程中的關(guān)鍵字和方法示例詳解

    Java線程中的關(guān)鍵字和方法示例詳解

    這篇文章主要介紹了Java有關(guān)線程中的關(guān)鍵字和方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • java中的正則操作方法總結(jié)

    java中的正則操作方法總結(jié)

    關(guān)于正則表達(dá)式的使用,更多的是自己的經(jīng)驗(yàn),有興趣可以參閱相關(guān)書籍。這里主要寫一下java中的正則操作方法
    2013-10-10
  • Java設(shè)計(jì)模式之狀態(tài)模式State Pattern詳解

    Java設(shè)計(jì)模式之狀態(tài)模式State Pattern詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之狀態(tài)模式State Pattern,狀態(tài)模式允許一個(gè)對(duì)象在其內(nèi)部狀態(tài)改變的時(shí)候改變其行為。這個(gè)對(duì)象看上去就像是改變了它的類一樣
    2022-11-11
  • SpringBoot 注解事務(wù)聲明式事務(wù)的方式

    SpringBoot 注解事務(wù)聲明式事務(wù)的方式

    springboot使用上述注解的幾種方式開(kāi)啟事物,可以達(dá)到和xml中聲明的同樣效果,但是卻告別了xml,使你的代碼遠(yuǎn)離配置文件。今天就扒一扒springboot中事務(wù)使用注解的玩法,感興趣的朋友一起看看吧
    2017-09-09
  • 詳細(xì)易懂帶你了解Spring中的注解

    詳細(xì)易懂帶你了解Spring中的注解

    這篇文章主要介紹了詳細(xì)易懂帶你了解Spring中的注解,Spring的一個(gè)核心是IOC,是將Bean初始化加載到容器中,Bean是如何加載到容器的,可以使用Spring注解方式或者Spring XML配置方式,需要的朋友可以參考下
    2023-08-08
  • jackson序列化和反序列化的應(yīng)用實(shí)踐指南

    jackson序列化和反序列化的應(yīng)用實(shí)踐指南

    這篇文章主要給大家介紹了關(guān)于jackson序列化和反序列化的應(yīng)用實(shí)踐指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java實(shí)現(xiàn)抖音代碼舞源碼

    java實(shí)現(xiàn)抖音代碼舞源碼

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)抖音代碼舞的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 如何解決通過(guò)spring-boot-maven-plugin package失敗問(wèn)題

    如何解決通過(guò)spring-boot-maven-plugin package失敗問(wèn)題

    這篇文章主要介紹了如何解決通過(guò)spring-boot-maven-plugin package失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論