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

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

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

工廠模式

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

工廠模式可以分為三類

  • 簡單工廠模式
  • 工廠方法模式
  • 抽象工廠模式

簡單工廠模式

定義一個接口,將創(chuàng)建對象和其本身的業(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)建對象只需要直接調(diào)用PetFactory工廠的創(chuàng)建方法即可,根據(jù)用戶需求來創(chuàng)建指定對象,執(zhí)行對應(yīng)方法

工廠方法模式

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

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

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ù)擴展,但是工作量較大

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

抽象工廠模式

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

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

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

代碼如下:

// 工廠接口
public interface ProductFactory {
    RouterProduct getRouter();  // 生產(chǎn)路由器
    PhoneProduct getPhone();   // 生產(chǎn)手機
}
// 手機、路由器接口
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();
  }
}
// 測試
public static void main(String[] args) {
  // 拿到工廠對象
  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)品接口實現(xiàn)類,華為手機、小米手機、華為路由器等等

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

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

相關(guān)文章

  • java maven項目如何讀取配置文件信息

    java maven項目如何讀取配置文件信息

    這篇文章主要介紹了java maven項目如何讀取配置文件信息,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot+Jersey跨域文件上傳的實現(xiàn)示例

    SpringBoot+Jersey跨域文件上傳的實現(xiàn)示例

    在SpringBoot開發(fā)后端服務(wù)時,我們一般是提供接口給前端使用,本文主要介紹了SpringBoot+Jersey跨域文件上傳的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • java編程無向圖結(jié)構(gòu)的存儲及DFS操作代碼詳解

    java編程無向圖結(jié)構(gòu)的存儲及DFS操作代碼詳解

    這篇文章主要介紹了java編程無向圖結(jié)構(gòu)的存儲及DFS操作代碼詳解,具有一定借鑒價值,需要的朋友可以了解下。
    2017-12-12
  • 基于SpringBoot的Docker部署詳解

    基于SpringBoot的Docker部署詳解

    這篇文章主要為大家介紹了基于SpringBoot的Docker部署過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • SpringCloud?Eureka服務(wù)注冊中心應(yīng)用入門詳解

    SpringCloud?Eureka服務(wù)注冊中心應(yīng)用入門詳解

    這篇文章主要介紹了Spring?Cloud?Eureka服務(wù)注冊中心入門流程分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Spring輕松解決循環(huán)依賴

    Spring輕松解決循環(huán)依賴

    Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對象的創(chuàng)建過程和依賴注入的方式。依賴注入方式,我之前的博客有所分享,大家可以在看本篇文章之前進行一下小小的回顧
    2023-04-04
  • 解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報錯問題

    解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報錯問題

    這篇文章主要介紹了解決springboot 多線程使用MultipartFile讀取excel文件內(nèi)容報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java循環(huán)隊列原理與用法詳解

    Java循環(huán)隊列原理與用法詳解

    這篇文章主要介紹了Java循環(huán)隊列原理與用法,結(jié)合實例形式詳細(xì)分析了Java循環(huán)隊列基本概念、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-03-03
  • Springboot 使用具體化類和配置來縮短單元測試時間

    Springboot 使用具體化類和配置來縮短單元測試時間

    這篇文章主要介紹了Springboot 使用具體化類和配置來縮短單元測試時間,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java8如何根據(jù)list對象中的屬性過濾篩選

    java8如何根據(jù)list對象中的屬性過濾篩選

    這篇文章主要介紹了java8如何根據(jù)list對象中的屬性過濾篩選,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05

最新評論

安吉县| 丰台区| 登封市| 岳西县| 嘉黎县| 敖汉旗| 遵化市| 盈江县| 临西县| 酉阳| 敦化市| 获嘉县| 古田县| 耒阳市| 五大连池市| 隆子县| 姜堰市| 鄂托克前旗| 天柱县| 宣威市| 阳西县| 沭阳县| 永嘉县| 多伦县| 鹿邑县| 玉田县| 新乡县| 淳化县| 许昌县| 定结县| 锡林浩特市| 翁牛特旗| 和硕县| 信宜市| 沙河市| 永顺县| 昌吉市| 普兰店市| 江永县| 治多县| 吴桥县|