java - 默认情况下,Spring 是否使用工厂模式?

标签 java spring spring-mvc design-patterns

我刚刚阅读了 Head First Design Patterns 一书中的工厂模式。我只是想知道,默认情况下,Spring 是否使用它。

假设我有一个 AppConfigServiceImpl.java:

@Service("appConfigService")
public class AppConfigServiceImpl implements AppConfigService {

    @Autowired
    private UserService userService;
    @Autowired
    private IdGeneratorService idGeneratorService;

    @Override
    public void initializeUserId() {
        final Integer lastUserId = userService.getLastId();
        idGeneratorService.initialize(lastUserId);
    }
}

AppConfigService 不是工厂类接口(interface)吗? AppConfigServiceImpl 是具体类吗?以及 initializeUserId() 工厂方法?

或者如果我有这样的结构怎么办:

public abstract class User 
public class AdminUser extends User
public class BusinessUser extends User

public class UserServiceImpl implements UserService {
    @Override
    public User getUser(String userType) {
        if (UserType.ADMIN.toString.equalsIgnoreCase(userType)) {
            return new AdminUser();
        } else {
            return new BusinessUser();
        }
    }
}

最佳答案

不,这不完全是工厂模式。

顾名思义,工厂生产某种东西。在软件中,工厂生产对象。所以如果你想要一个 Car 实例,你可以使用 CarFactory 来表示:

Car myCar = CarFactory.produceACar();

这就是整个模式。您有一个类(CarFactory),它封装了对象(Car)的生成。重要的是,类(class)的目的就是要做到这一点。仅仅返回一个对象不足以成为一个工厂 ;)

在您的示例中,方法 UserServiceImpl#getUser 可能是某种工厂方法,因为它根据输入返回不同类型的对象。但并非每种针对不同输入返回不同内容的方法都是工厂 - 几乎每种方法都会以某种方式做到这一点。

在您的示例中,您可以创建您的 UserServiceImpl 可以使用的 UserFactory。您可以创建一个 AdminUserFactory(用于创建管理员)和一个 BusinessUserFactory(用于创建业务用户)。 getUser 方法将使用两个工厂来摆脱对象的具体实例化机制。

关于java - 默认情况下,Spring 是否使用工厂模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755576/

相关文章:

java - 这两种方法一起是一种递归形式吗?

java - 了解 Spring Boot 的使用和配置

java - Spring 3.1 和 Hibernate 4.1 与 Maven

javascript - jQuery Ajax 请求错误 404(未找到)但它有效

java - Spring Security XML 配置与 Java 配置

java - 如何将 Java Web 应用程序转换为桌面 (.exe) 应用程序

java - Java 中用于音频的循环 ShortBuffer

java - AndEngine - X 秒后杀死 Sprite?

java - RESTEasy + Spring 3 + Maven

javascript - Html 地理定位未在本地主机应用程序上请求许可?