我正在编写从字符串映射构建 UserProfile 对象的代码。目前我将代码分成几个 Builder构建部分用户配置文件的对象,如下所示:
public UserProfile getUserProfile(int id) {
Map<String, String> data = this.service.getUserProfileData(int id);
UserProfile profile = userProfileBuilder.build(data);
profile.setMarketingPreferences( marketingPreferencesBuilder.build(data) );
profile.setAddress( addressBuilder.build(data) );
...
return profile;
}
如果能有一个构建器对象列表就好了,这样我就可以动态添加额外的构建器,而无需触及类和破坏 OCP .
也许是这样的,而不是:
private List<ProfileBuilder> builders;
public void buildBuilders() {
this.builders = new ArrayList<ProfileBuilder>();
builders.add( new BasicDetailsBuilder() );
builders.add( new AddressBuilder() );
builders.add( new MarkettingPreferencesBuilder() );
...
}
public UserProfile getUserProfile(int id) {
Map<String, String> data = this.service.getUserProfileData(int id);
UserProfile profile = new UserProfile();
for(ProfileBuilder builder : this.builders) {
builder.build( profile, data );
}
return profile;
}
您能看出这种方法有什么问题吗?这严格来说是 Builder 设计模式吗?
最佳答案
这更像是一个访客而不是一个构建器。你可以这样做:
interface UserProfileVisitor {
public void visit(UserProfile profile, Map<String, String> data);
}
关于java - 我应该如何实现构建器的动态列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5476375/