工厂模式的基本定义是什么?它有哪些具体的应用场景?
工厂模式是一种创建型设计模式,它提供了一种创建对象的方式,使得具体实现类的创建逻辑从客户代码中解耦出来,使得客户代码不需要关心具体的对象是如何被创建出来的。工厂模式主要有三种形式:简单工厂、工厂方法和抽象工厂。
- 简单工厂(Simple Factory):简单工厂其实并不是一个设计模式,更多的是一种编程习惯。它的主要思想是创建一个工厂类,你可以通过传入参数或者条件,然后在工厂类中使用 switch 或者 if-else 语句来产生不同的类实例。
-
工厂方法(Factory Method):工厂方法是一个真正的设计模式,它定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类。
-
抽象工厂(Abstract Factory):抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户程序需要创建一个ConcreteFactory的对象,然后利用这个对象创建一系列的产品。
以下是一个工厂方法模式的简单例子:
public interface Animal {
void speak();
}
public class Dog implements Animal {
public void speak() {
System.out.println("Woof!");
}
}
public class Cat implements Animal {
public void speak() {
System.out.println("Meow!");
}
}
public abstract class AnimalFactory {
public abstract Animal createAnimal();
}
public class DogFactory extends AnimalFactory {
public Animal createAnimal() {
return new Dog();
}
}
public class CatFactory extends AnimalFactory {
public Animal createAnimal() {
return new Cat();
}
}
public class Client {
public static void main(String[] args) {
AnimalFactory factory = new DogFactory();
Animal dog = factory.createAnimal();
dog.speak(); // Output: "Woof!"
factory = new CatFactory();
Animal cat = factory.createAnimal();
cat.speak(); // Output: "Meow!"
}
}
在这个例子中,DogFactory
和 CatFactory
都是 AnimalFactory
的子类,分别创建 Dog
和 Cat
对象。AnimalFactory
是一个抽象的工厂类,定义了创建对象的接口(createAnimal
),具体由哪个类实例化由子类 (DogFactory
或 CatFactory
) 决定。这样,如果我们要添加新的 Animal
类型,只需要添加相应的工厂类就可以了,而不需要修改 client 代码。