我该如何实现动态的构建器列表?

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设计模式吗?

luk*_*ymo 1

仅当构建 UserProfile 很复杂时才使用 builder/builders

如果您只想将 Map 中的数据重写到 UserProfile 中的字段,并且 UserProfile 中有很多字段,也许更好的解决方案如下:反射和映射:Map 中的键 -> UserProfile 中的 setter 方法