我正在編寫從字符串映射構建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設計模式嗎?
感謝您的反饋。 UserProfile的構造可能很複雜,類映射的時間很長。以上也是一個簡化,Map中的一些條目可以是更多的地圖。是否有API允許我按照你的建議自動將值映射到bean? – 2011-03-30 09:28:45
我不熟悉JAXB,xtreme和castor,只要將XML映射到Java類 – smas 2011-03-30 09:43:34
就可以了。不幸的是,我用來檢索用戶配置文件數據的服務返回的是Map,而不是XML。 – 2011-03-30 10:43:30