抽象工厂模式是一种设计模式,也被称为工厂的工厂。它的目的是创建一组相关对象,而无需指定它们的具体类。
在抽象工厂模式中,有一个抽象工厂,它定义了创建一组相关对象的接口,同时也有多个具体工厂,它们实现了抽象工厂的接口并创建了具体类的对象。
以下是抽象工厂模式代码示例:
```java
// 抽象产品 interface
public interface Animal {
void move();
}
// 具体产品 class
public class Cat implements Animal {
@Override
public void move() {
System.out.println("Cat is walking");
}
}
// 具体产品 class
public class Dog implements Animal {
@Override
public void move() {
System.out.println("Dog is running");
}
}
// 抽象工厂 class
public interface AnimalFactory {
Animal createAnimal();
}
// 具体工厂 class
public class CatFactory implements AnimalFactory {
@Override
public Animal createAnimal() {
return new Cat();
}
}
// 具体工厂 class
public class DogFactory implements AnimalFactory {
@Override
public Animal createAnimal() {
return new Dog();
}
}
// client class
public class Client {
public static void main(String[] args) {
AnimalFactory catFactory = new CatFactory();
AnimalFactory dogFactory = new DogFactory();
Animal cat = catFactory.createAnimal();
Animal dog = dogFactory.createAnimal();
cat.move();
dog.move();
}
}
```
在上面的示例中,我们有一个抽象工厂 interface AnimalFactory 和2个具体工厂类 CatFactory 和 DogFactory。每个具体工厂类都实现了 AnimalFactory 的 createAnimal() 方法,以创建 Cat 和 Dog 实例。
此设计模式的优点是:
1. 可以隐藏对象的具体类型并使客户端根据接口使用它们。
2. 与工厂方法相比,它提供了一种简单的方法来创建对象相关的家族(也就是一组相关的对象)而无需指定其具体类。
缺点是:
1. 新加入的产品家族困难,需要修改工厂接口及其所有实现。
2. 在某些场景下,可能难以支持新类型的产品。
总的来说,抽象工厂模式是一个重要的设计模式,它帮助我们创建一组相关对象而无需指定它们的具体类型,使代码更可扩展和可维护。但是,在应用它之前需要认真考虑它是否适合当前的需求。
扫码咨询 领取资料