工厂模式(Factory Pattern)是设计模式中的一种创建型模式,它提供了一种创建对象的最佳方式,而无需指定将要创建的对象的具体类。本文将对基于Java的工厂模式进行深入解析,并探讨其在实际开发中的应用场景。
工厂模式的核心思想是将对象的实例化延迟到子类或者工厂类中,通过定义一个创建对象的接口或抽象类,让子类决定实例化哪一个类。工厂模式主要包括简单工厂模式、工厂方法模式和抽象工厂模式。
简单工厂模式通过一个工厂类根据传入的参数决定创建哪一个类的对象,它不属于GoF(四人帮)设计模式之一,但它是工厂方法模式的基础。
// 简单工厂类
public class SimpleFactory {
public static Product createProduct(String type) {
if (type.equals("A")) {
return new ProductA();
} else if (type.equals("B")) {
return new ProductB();
}
return null;
}
}
// 产品接口
public interface Product {
void use();
}
// 具体产品类
public class ProductA implements Product {
@Override
public void use() {
System.out.println("使用产品A");
}
}
public class ProductB implements Product {
@Override
public void use() {
System.out.println("使用产品B");
}
}
工厂方法模式定义一个用于创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
// 抽象工厂类
public interface Factory {
Product createProduct();
}
// 具体工厂类
public class ConcreteFactoryA implements Factory {
@Override
public Product createProduct() {
return new ProductA();
}
}
public class ConcreteFactoryB implements Factory {
@Override
public Product createProduct() {
return new ProductB();
}
}
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式主要用于创建相关对象家族,而不需要明确指定具体类。
// 抽象产品A
public interface AbstractProductA {
void use();
}
// 抽象产品B
public interface AbstractProductB {
void use();
}
// 抽象工厂
public interface AbstractFactory {
AbstractProductA createProductA();
AbstractProductB createProductB();
}
// 具体工厂
public class ConcreteFactory1 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
// 具体产品类
public class ProductA1 implements AbstractProductA {
@Override
public void use() {
System.out.println("使用产品A1");
}
}
public class ProductB1 implements AbstractProductB {
@Override
public void use() {
System.out.println("使用产品B1");
}
}
public class ProductA2 implements AbstractProductA {
@Override
public void use() {
System.out.println("使用产品A2");
}
}
public class ProductB2 implements AbstractProductB {
@Override
public void use() {
System.out.println("使用产品B2");
}
}
工厂模式在以下场景中尤为适用:
工厂模式是一种强大的设计模式,它提供了创建对象的灵活性和可扩展性。通过深入理解工厂模式的原理、不同类型以及应用场景,开发者可以更好地设计和实现代码,提高系统的可维护性和可扩展性。