Я пишу код, который создает объект 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?