我刚刚阅读了 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/