簡體   English   中英

我該如何實現動態的構建器列表?

[英]How should I implement a dynamic list of builders?

我正在編寫從字符串映射構建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;
}

能夠擁有一個構建器對象列表是很好的,這樣我就可以動態添加其他構建器而無需觸及類並打破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設計模式嗎?

這變得更像是一個訪客而不是一個建設者。 你可以這樣做:

interface UserProfileVisitor {
  public void visit(UserProfile profile, Map<String, String> data);
}

僅當構造UserProfile很復雜時才使用構建器/構建器

如果您只想從Map中重寫數據到UserProfile中的字段,並且您在UserProfile中有很多字段,那么更好的解決方案可能是:反射和映射:來自Map的鍵 - > UserProfile中的setter方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM