2013-02-09 73 views
0

我正在設計一個複雜配置類作爲API設計的一部分。 Configuration類大致是這樣的。(我忽略了泛型/訪問修飾符等)在java中設計一個可變複雜類及其構造

class Configuration { 
    One obj1; 
    Two obj2; 
} 

class One { 
     List<Double> values; 
} 

class Two { 
     double value; 
     Map<String, Double> data; 
} 

這是我想要完成的任務:

  • 我希望用戶能夠創建此配置類第一次輕鬆並提交給服務器。
  • 然後,他們可以更改此類的任何部分並將更新的配置發送到服務器。

什麼設計模式使用和避免?

讓這個類不可變並使用生成器模式更好嗎? 或者只是提供各種修改方法在Configuration類上,以便它們可以在原地修改相同的Configuration類(在所有級別),而無需爲每個更新創建新的Configuration類。我認爲Builder模式僅適用於不可變類。

問題:

  • 有沒有辦法利用這種類型的場景Builder模式?
  • 或者像上面提到的那樣,在Configuration類上提供mutator方法會更好嗎?
  • 還有其他更好的模式嗎?

回答

0

我認爲你應該使用原型模式: 在你的代碼,你可以添加地圖持有所有類型的配置 的地圖有一個名爲「currentConfiguration」鍵和值將是應加載配置。地圖還可以包含可以存儲在地圖中的其他配置,並且可以根據需要替換當前配置。 一旦你從地圖獲取配置,你只需克隆配置對象,用戶就可以做到他對此感到滿意的事情。在更改之後,他可以使用speicifc名稱將配置保存在地圖中。所以用戶可以獲得非常接近的配置對象,並且相應地配置它。 的代碼看起來應該是這樣:'公共類CloudRepository {

private Map<String, Configuration> rep; 

public CloudRepository(Configuration current){ 
    rep = new HashMap<String, Configuration>(); 
    rep.put("current", current); 
} 

public Configuration getConfiguration(String string){ 
    return (Configuration) rep.get(string).clone(); 
} 

public void addConfiguration(String name, Configuration conf){ 
    rep.put(name, conf); 
} 

public void replaceCurrentConfiguration(Configuration conf){ 
    rep.put("current", conf); 
} 

}

你也可以寫更多的代碼來處理歷史記錄您的配置。 你也可以考慮製作這個類的單身人士

相關問題