• <menu id="imuyi"><tt id="imuyi"></tt></menu>
  • 專注Java教育13年 全國咨詢/投訴熱線:400-8080-105
    動力節點LOGO圖
    始于2009,一家只教授Java的培訓機構
    首頁 學習攻略 Java學習 Java抽象工廠模式詳解

    Java抽象工廠模式詳解

    更新時間:2022-10-25 10:55:57 來源:動力節點 瀏覽55次

    抽象工廠設計模式示例

    在本例中,我們將創建工廠方法設計模式的兩個實現:AnimalFactory和Color Factory。

    之后,我們將使用抽象工廠AbstractFactory 管理對它們的訪問:

    首先,我們將創建一個Animal類家族,稍后將在我們的抽象工廠中使用它。

    這是動物界面:

    public interface Animal {
        String getAnimal();
        String makeSound();
    }

    和一個具體的實現Duck:

    public class Duck implements Animal {
        @Override
        public String getAnimal() {
            return "Duck";
        }
        @Override
        public String makeSound() {
            return "Squeks";
        }
    }

    此外,我們可以完全以這種方式創建Animal接口(如Dog、Bear等)的更具體的實現。

    抽象工廠處理依賴對象的族??紤]到這一點,我們將引入另外一種顏色系列作為具有一些實現(白色、棕色……)的接口。

    我們現在將跳過實際代碼,但可以在此處找到。

    現在我們已經準備好了多個系列,我們可以為它們創建一個AbstractFactory接口:

    public interface AbstractFactory<T> {
        T create(String animalType) ;
    }

    接下來,我們將使用我們在上一節中討論的工廠方法設計模式來實現AnimalFactory :

    public class AnimalFactory implements AbstractFactory<Animal> {
        @Override
        public Animal create(String animalType) {
            if ("Dog".equalsIgnoreCase(animalType)) {
                return new Dog();
            } else if ("Duck".equalsIgnoreCase(animalType)) {
                return new Duck();
            }
            return null;
        }
    }

    同樣,我們可以使用相同的設計模式為Color接口實現一個工廠。

    設置完所有這些后,我們將創建一個FactoryProvider類,該類將為我們提供AnimalFactory或ColorFactory的實現,具體取決于我們提供給getFactory()方法的參數:

    public class FactoryProvider {
        public static AbstractFactory getFactory(String choice){        
            if("Animal".equalsIgnoreCase(choice)){
                return new AnimalFactory();
            }
            else if("Color".equalsIgnoreCase(choice)){
                return new ColorFactory();
            }        
            return null;
        }
    }

    何時使用抽象工廠模式:

    客戶端獨立于我們如何在系統中創建和組合對象

    該系統由多個對象族組成,這些族旨在一起使用

    我們需要一個運行時值來構造一個特定的依賴項

    雖然該模式在創建預定義對象時非常有用,但添加新對象可能具有挑戰性。要支持新類型的對象,需要更改AbstractFactory類及其所有子類。

    提交申請后,顧問老師會電話與您溝通安排學習

    免費課程推薦 >>
    技術文檔推薦 >>
    返回頂部
    小敏爽?好舒服?快?好大
  • <menu id="imuyi"><tt id="imuyi"></tt></menu>