Я пишу код, который создает объект UserProfile из Map of Strings. В данный момент я делю код на несколько 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?