Как мне реализовать динамический список построителей?

Я пишу код, который создает объект UserProfile из карты строк. В настоящий момент я делю код на несколько объектов Builder , которые создают части профиля пользователя, примерно так:

public UserProfile getUserProfile(int id) {
  Map data = this.service.getUserProfileData(int id);
  UserProfile profile = userProfileBuilder.build(data);
  profile.setMarketingPreferences( marketingPreferencesBuilder.build(data) );
  profile.setAddress( addressBuilder.build(data) );

  ...

  return profile;
}

Было бы неплохо иметь вместо этого список объектов Builder, чтобы что я могу динамически добавлять дополнительные построители, не касаясь класса и не нарушая OCP .

Вместо этого, возможно, что-то вроде этого:

private List builders;

public void buildBuilders() {
  this.builders = new ArrayList();
  builders.add( new BasicDetailsBuilder() );
  builders.add( new AddressBuilder() );
  builders.add( new MarkettingPreferencesBuilder() );

  ...

}

public UserProfile getUserProfile(int id) {
  Map data = this.service.getUserProfileData(int id);
  UserProfile profile = new UserProfile();
  for(ProfileBuilder builder : this.builders) {
    builder.build( profile, data );
  }

  return profile;
}

Вы видите какие-либо проблемы с этим подходом? Это строго шаблон проектирования Builder?

5
задан Ricardo Gladwell 30 March 2011 в 09:29
поделиться