簡介
????工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計模式之一浸船。這種類型的設(shè)計模式屬于創(chuàng)建型模式止后,它提供了一種創(chuàng)建對象的最佳方式湘捎。
在工廠模式中,我們在創(chuàng)建對象時不會對客戶端暴露創(chuàng)建邏輯畔规,并且是通過使用一個共同的接口來指向新創(chuàng)建的對象。
意圖:定義一個創(chuàng)建對象的接口恨统,讓其子類自己決定實例化哪一個工廠類叁扫,工廠模式使其創(chuàng)建過程延遲到子類進(jìn)行。
主要解決:主要解決接口選擇的問題畜埋。
何時使用:我們明確地計劃不同條件下創(chuàng)建不同實例時莫绣。
如何解決:讓其子類實現(xiàn)工廠接口,返回的也是一個抽象的產(chǎn)品悠鞍。
關(guān)鍵代碼:創(chuàng)建過程在其子類執(zhí)行对室。
實現(xiàn)
我們將創(chuàng)建一個?Animal?接口和實現(xiàn)?Animal?接口的實體類。下一步是定義工廠類?AnimalFactory咖祭。
FactoryPatternDemo掩宜,我們的演示類使用?AnimalFactory?來獲取?Aniaml?對象。它將向?AnimalFactory?傳遞信息(DOG / CAT / PIG)心肪,以便獲取它所需對象的類型锭亏。
步驟1
創(chuàng)建一個接口:
public interface Animal{
????void dc();
}
步驟2
創(chuàng)建實現(xiàn)接口的實體類:
public class Dog implements Animal{
? ? @override
? ? public void dc(){
? ? ? ? ? ? System.out.println("Dog");
????}
}
public class Cat implements Animal{
????@override
? ? public void dc(){
????????????System.out.println("Cat");
????}
}
public class Pig implements Animal{
????@override
? ? public void dc(){
????????System.out.println("Pig");
????}
}
步驟3
創(chuàng)建一個工廠,生成基于給定信息的實體類的對象硬鞍。
public class?AnimalFactory{
? ? ? ? public Animal getDc(String animalType){
????????????if(animalType == null){ return null;
? ? ? ? ????}? ? ? ?
? ? ? ? ? ? if(animalType.equalsIgnoreCase("DOG")){? ? ? ??
?????????????????????return new Dog();
? ? ? ? ? ? } else if(animalType.equalsIgnoreCase("CAT")){? ? ? ??
?????????????????????return new Cat();
? ? ? ? ? ? } else if(animalType.equalsIgnoreCase("PIG")){? ? ? ??
?????????????????????return new Pig();
? ? ? ? ? ? }? ? ??
????????????return null;
????}
}
步驟4
使用該工廠慧瘤,通過傳遞類型信息來獲取實體類的對象戴已。
public class FactoryPatternDemo {
? public static void main(String[] args) {? ? ??
? ? ? ShapeFactory shapeFactory = new ShapeFactory();
? ? ? //獲取 Circle 的對象,并調(diào)用它的 dc 方法? ? ??
? ? ? Animal animal1 = shapeFactory.getDc("DOG");
? ? ? //調(diào)用 Dog 的 dc 方法? ? ??
? ? ? animal1.dc();
? ? ? //獲取 Cat 的對象锅减,并調(diào)用它的 dc 方法? ? ??
? ? ? Animal animal2?= shapeFactory.getDc("CAT");
? ? ? //調(diào)用 Cat 的 dc 方法? ? ??
? ? ? animal2.dc();
? ? ? //獲取 Pig 的對象糖儡,并調(diào)用它的 dc 方法? ? ??
? ? ? Animal animal3?= shapeFactory.getDc("PIG");
? ? ? //調(diào)用 Pig 的 dc 方法? ? ??
? ? ? animal3.dc();
? }}