前言
在软件开发过程中,我们经常需要创建各种对象。如果直接在客户端代码中使用 new
关键字来实例化对象,不仅会导致代码耦合度高,还会使系统难以扩展和维护。简单工厂模式通过引入一个工厂类来负责创建对象,降低了客户端与具体类之间的耦合度,提高了代码的灵活性和可维护性。在这篇文章中,我们将详细讲解简单工厂模式,并展示它在 Spring 框架中的应用,特别是使用注解方式进行 Bean 的注入。
什么是简单工厂模式?
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,通过一个工厂类,根据传入的参数,决定创建哪一种具体产品类的实例。虽然简单工厂模式不属于 GoF 的 23 种设计模式之一,但它在实际开发中非常常用。
动机
在开发过程中,我们常常需要根据不同的条件创建不同的对象。如果直接在代码中使用 new
关键字来实例化对象,会导致代码耦合度高且难以维护。简单工厂模式通过引入一个工厂类来负责创建对象,降低了客户端与具体类之间的耦合度。
结构
简单工厂模式的结构如下:
- 产品(Product):定义所有产品对象的公共接口。
- 具体产品(ConcreteProduct):实现产品接口的具体类。
- 工厂(Factory):根据输入参数,决定创建哪一个具体产品类的实例。
实现简单工厂模式
下面通过一个简单的例子来实现简单工厂模式。假设我们需要创建不同类型的图形对象,例如圆形(Circle)和矩形(Rectangle)。
产品接口
首先,定义一个产品接口 Shape
,它包含一个 draw
方法。
// 产品接口
public interface Shape {
void draw();
}
具体产品类
接下来,创建几种具体的产品类,分别实现 Shape
接口。
// 圆形
public class Circle implements Shape {
public void draw() {
System.out.println("Drawing Circle.");
}
}
// 矩形
public class Rectangle implements Shape {
public void draw() {
System.out.println("Drawing Rectangle.");
}
}
工厂类
然后,创建一个工厂类 ShapeFactory
,它包含一个静态方法 createShape
,根据传入的形状类型参数创建相应的产品对象。
// 工厂类
public class ShapeFactory {
public static Shape createShape(String shapeType) {
if (shapeType == null) {
return null;
}
if (shapeType.equalsIgnoreCase("CIRCLE")) {
return new Circle();
} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
return new Rectangle();
}
return null;
}
}
客户端代码
最后,在客户端代码中使用工厂类来创建产品对象,并调用其方法。
public class Application {
public static void main(String[] args) {
Shape shape1 = ShapeFactory.createShape("CIRCLE");
shape1.draw();
Shape shape2 = ShapeFactory.createShape("RECTANGLE");
shape2.draw();
}
}
在 Spring 框架中的应用
在实际开发中,Spring 框架中的 BeanFactory
是简单工厂模式的一个典型应用。下面我们展示如何使用 Spring 的注解方式来实现 Bean 的注入。
定义 Bean 接口和实现类
首先,定义一个简单的 GreetingService
接口和其实现类 GreetingServiceImpl
。
public interface GreetingService {
void sayGreeting();
}
import org.springframework.stereotype.Service;
@Service
public class GreetingServiceImpl implements GreetingService {
public void sayGreeting() {
System.out.println("Hello, welcome to Spring!");
}
}
配置 Spring
接着,在 Spring 配置类中启用组件扫描,确保 Spring 能够发现和注册我们的 GreetingServiceImpl
Bean。
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
}
使用 @Autowired
注入 Bean
最后,在客户端代码中使用 @Autowired
注解来注入 GreetingService
Bean,并调用其方法。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class SpringApp {
@Autowired
private GreetingService greetingService;
public void run() {
greetingService.sayGreeting();
}
public static void main(String[] args) {
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
SpringApp app = context.getBean(SpringApp.class);
app.run();
}
}
总结
简单工厂模式通过引入一个工厂类来创建对象,降低了客户端代码与具体类之间的耦合度,提高了代码的灵活性和可维护性。在电商系统中,我们可以使用简单工厂模式来创建不同类型的支付方式。在实际开发中,Spring 框架中的 BeanFactory
是简单工厂模式的一个典型应用,并且使用注解方式可以更方便地进行 Bean 的注入。
希望这篇文章能帮助你更好地理解简单工厂模式及其在 Spring 中的应用。如果你觉得这篇文章对你有帮助,请给我点个关注和赞!谢谢!
标签:框架,Spring,void,深入浅出,public,Shape,工厂,class From: https://blog.csdn.net/qq_40254606/article/details/139738293