更新時(shí)間:2022-10-25 10:55:57 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3039次
在本例中,我們將創(chuàng)建工廠方法設(shè)計(jì)模式的兩個(gè)實(shí)現(xiàn):AnimalFactory和Color Factory。
之后,我們將使用抽象工廠AbstractFactory 管理對(duì)它們的訪問:
首先,我們將創(chuàng)建一個(gè)Animal類家族,稍后將在我們的抽象工廠中使用它。
這是動(dòng)物界面:
public interface Animal {
String getAnimal();
String makeSound();
}
和一個(gè)具體的實(shí)現(xiàn)Duck:
public class Duck implements Animal {
@Override
public String getAnimal() {
return "Duck";
}
@Override
public String makeSound() {
return "Squeks";
}
}
此外,我們可以完全以這種方式創(chuàng)建Animal接口(如Dog、Bear等)的更具體的實(shí)現(xiàn)。
抽象工廠處理依賴對(duì)象的族。考慮到這一點(diǎn),我們將引入另外一種顏色系列作為具有一些實(shí)現(xiàn)(白色、棕色……)的接口。
我們現(xiàn)在將跳過實(shí)際代碼,但可以在此處找到。
現(xiàn)在我們已經(jīng)準(zhǔn)備好了多個(gè)系列,我們可以為它們創(chuàng)建一個(gè)AbstractFactory接口:
public interface AbstractFactory<T> {
T create(String animalType) ;
}
接下來,我們將使用我們?cè)谏弦还?jié)中討論的工廠方法設(shè)計(jì)模式來實(shí)現(xiàn)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;
}
}
同樣,我們可以使用相同的設(shè)計(jì)模式為Color接口實(shí)現(xiàn)一個(gè)工廠。
設(shè)置完所有這些后,我們將創(chuàng)建一個(gè)FactoryProvider類,該類將為我們提供AnimalFactory或ColorFactory的實(shí)現(xiàn),具體取決于我們提供給getFactory()方法的參數(shù):
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;
}
}
客戶端獨(dú)立于我們?nèi)绾卧谙到y(tǒng)中創(chuàng)建和組合對(duì)象
該系統(tǒng)由多個(gè)對(duì)象族組成,這些族旨在一起使用
我們需要一個(gè)運(yùn)行時(shí)值來構(gòu)造一個(gè)特定的依賴項(xiàng)
雖然該模式在創(chuàng)建預(yù)定義對(duì)象時(shí)非常有用,但添加新對(duì)象可能具有挑戰(zhàn)性。要支持新類型的對(duì)象,需要更改AbstractFactory類及其所有子類。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)