📅  最后修改于: 2023-12-03 15:28:08.741000             🧑  作者: Mango
工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们不必指定要创建的对象的确切类,而是使用一个工厂方法,该方法根据需要返回适当类对象的实例。
工厂模式主要有三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。
简单工厂模式也被称为静态工厂模式。在简单工厂模式中,我们使用一个单一的类,该类决定实例化哪一个类对象。这种类型的工厂模式属于创建型模式,因为此模式提供了创建对象的方法。
代码实现:
public class SimpleFactory {
public static Product createProduct(String type){
switch (type) {
case "A":
return new ProductA();
case "B":
return new ProductB();
default:
throw new IllegalArgumentException("Unsupported product type: " + type);
}
}
}
在工厂方法模式中,我们定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。这种类型的工厂模式属于创建型模式,因为此模式提供了创建对象的方法。
代码实现:
public interface Factory {
Product createProduct();
}
public class ProductAFactory implements Factory {
public Product createProduct() {
return new ProductA();
}
}
public class ProductBFactory implements Factory {
public Product createProduct() {
return new ProductB();
}
}
抽象工厂模式提供了一种创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这种类型的工厂模式属于创建型模式,因为此模式提供了创建对象的方法。
代码实现:
public interface AbstractFactory {
ProductA createProductA();
ProductB createProductB();
}
public class Factory1 implements AbstractFactory {
public ProductA createProductA() {
return new ProductA1();
}
public ProductB createProductB() {
return new ProductB1();
}
}
public class Factory2 implements AbstractFactory {
public ProductA createProductA() {
return new ProductA2();
}
public ProductB createProductB() {
return new ProductB2();
}
}
当创建对象逻辑复杂或需要根据应用程序配置或环境创建对象时,使用工厂模式是一个明智的选择。例如,当您有多个可能的类并且您不知道要使用哪个时,您可以使用工厂模式来创建对象。
工厂模式在Java API中有广泛的应用,如Java的Calendar类就使用了工厂方法模式。在用户不知道具体日历类是什么情况下,Calendar可以通过静态方法getInstance()来获取一个实例化的对象。