Spring框架中设计模式之 工厂模式

工厂模式:Spring 使用工厂模式创建并管理对象,将对象的创建过程与业务逻辑分离,降低了系统的耦合性。

public interface MyFactory {
  MyBean createBean();
}

public class MyBeanFactory implements MyFactory {
  public MyBean createBean() {
    return new MyBean();
  }
}

在上述代码中,MyBeanFactory 是一个工厂类,实现了 MyFactory 接口的 createBean 方法。通过工厂方法,Spring 容器可以将创建 MyBean 对象的过程与业务逻辑分离。

在 Spring 中,工厂模式主要应用在 Bean 工厂中。Spring 的 Bean 工厂负责创建和管理 Bean 对象,是 Spring 框架的核心组件。Spring 提供了多种类型的 Bean 工厂,如 XMLBeanFactory、ApplicationContext 等,每种 Bean 工厂都有其特定的用途。

下面是一个使用工厂模式的示例代码:

public interface Car {
    void drive();
}

public class Audi implements Car {
    @Override
    public void drive() {
        System.out.println("Driving Audi...");
    }
}

public class BMW implements Car {
    @Override
    public void drive() {
        System.out.println("Driving BMW...");
    }
}

public interface CarFactory {
    Car createCar();
}

public class AudiFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new Audi();
    }
}

public class BMWFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new BMW();
    }
}

public static void main(String[] args) {
    CarFactory factory = new AudiFactory();
    Car car = factory.createCar();
    car.drive();
}

在上面的代码中,CarFactory 是一个工厂接口,它定义了一个 createCar 方法用于创建 Car 对象。AudiFactory 和 BMWFactory 分别实现了 CarFactory 接口,并分别返回了 Audi 和 BMW 对象。在 main 方法中,我们从 AudiFactory 中获取了一个 Audi 对象,并调用了其 drive 方法来驾驶汽车。

在 Spring 中,Bean 工厂主要应用了工厂方法模式。Spring 的 Bean 工厂负责创建和管理 Bean 对象,其中 Bean 的创建过程是通过工厂方法实现的。在 Spring 中,Bean 工厂的实现类都实现了 FactoryBean 接口,该接口定义了一个 getObject 方法用于创建 Bean 对象。

下面是一个使用工厂方法模式的示例代码:

@Configuration
public class AppConfig {
    @Bean
    public Car audi() {
        return new Audi();
    }

    @Bean
    public Car bmw() {
        return new BMW();
    }
}

public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
    Car car = context.getBean("audi", Car.class);
    car.drive();
}

在上面的代码中,我们使用了 JavaConfig 来配置 Bean 工厂,通过 @Bean 注解来定义 Bean 的创建方法。在 main 方法中,我们从容器中获取了一个 id 为 “audi” 的 Bean,并调用了其 drive 方法来驾驶汽车。在 Spring 中,容器会在需要时自动调用工厂方法来创建 Bean 对象。通过使用工厂方法模式,Spring 可以将 Bean 的创建过程与应用程序解耦,使得应用程序更加灵活和可维护。