設計模式之抽象工廠模式(Java實現)
阿新 • • 發佈:2018-11-08
抽象工廠是一個超級工廠,用來建立其他工廠,又稱為工廠的工廠,也就是對各種不同的工廠再次進行抽象。在抽象工廠模式中,介面負責建立相關物件的工廠, 每個生成的工廠可以按照工廠模式提供物件。
首先建立兩個介面然後實現具體類
//再建立一個介面Plant interface Plant { public void print(); } //建立一個Cat的類實現Animal介面 class Cat implements Animal { public void print() { System.out.println("貓"); } } //建立一個Dog的類實現Animal介面 class Dog implements Animal { public void print() { System.out.println("狗"); } } //建立一個Rabbit的類實現Animal介面 class Rabbit implements Animal { public void print() { System.out.println("兔子"); } } //建立一個Flower的類實現Plant介面 class Flower implements Plant { public void print() { System.out.println("花朵"); } } //建立一個Tree的類實現Plant介面 class Tree implements Plant { public void print() { System.out.println("樹木"); }
接下來重點來了,建立一個抽象的工廠類
//建立一個抽象工廠
abstract class AbstractFactory {
abstract Animal getAnimal(String animal);
abstract Plant getPlant(String plant);
}
接著建立具體的工廠,繼承自抽象工廠類
//建立具體的工廠AnimalFactory繼承自AbstractFactory class AnimalFactory extends AbstractFactory { public Animal getAnimal(String animal) { if ("cat".equals(animal)) { return new Cat(); } else if ("dog".equals(animal)) { return new Dog(); } else if ("rabbit".equals(animal)) { return new Rabbit(); } else { return null; } } public Plant getPlant(String plant) { return null; } } //建立具體的工廠PlantFactory繼承自AbstractFactory class PlantFactory extends AbstractFactory { public Plant getPlant(String plant) { if("flower".equals(plant)) { return new Flower(); } else if ("tree".equals(plant)) { return new Tree(); } else { return null; } } public Animal getAnimal(String animal) { return null; } }
建立一個工廠生成器類,通過區分傳遞過來的引數生成具體的工廠類
//建立一個工廠生成器類,通過傳遞的相應引數建立工廠 class FactoryProducer { public static AbstractFactory getFactory(String factroyType) { if ("animal".equals(factroyType)) { return new AnimalFactory(); } else if ("plant".equals(factroyType)) { return new PlantFactory(); } else { return null; } } }
使用FactoryProducer抽象工廠生成器類獲取具體的工廠,然後通過具體的工廠獲取不同的物件
public class AbstractFactoryDemo {
public static void main(String[] args) {
//先獲取Animal的工廠
AbstractFactory animalFactory = FactoryProducer.getFactory("animal");
//通過Animal工廠獲取物件
Animal cat = animalFactory.getAnimal("cat");
cat.print();
Animal dog = animalFactory.getAnimal("dog");
dog.print();
Animal rabbit = animalFactory.getAnimal("rabbit");
rabbit.print();
//先獲取Plant的工廠
AbstractFactory plantFactory = FactoryProducer.getFactory("plant");
//通過Animal工廠獲取物件
Plant flower = plantFactory.getPlant("flower");
flower.print();
Plant tree = plantFactory.getPlant("tree");
tree.print();
}
}