Ric*_*ell 5 java design-patterns builder
我正在编写从字符串映射构建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;
}
Run Code Online (Sandbox Code Playgroud)
能够拥有一个构建器对象列表是很好的,这样我就可以动态添加其他构建器而无需触及类并打破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;
}
Run Code Online (Sandbox Code Playgroud)
你能看到这种方法有什么问题吗?这是严格的Builder设计模式吗?
仅当构建 UserProfile 很复杂时才使用 builder/builders
如果您只想将 Map 中的数据重写到 UserProfile 中的字段,并且 UserProfile 中有很多字段,也许更好的解决方案如下:反射和映射:Map 中的键 -> UserProfile 中的 setter 方法