我必須以4-5種不同方式使用對象Y的屬性(都是相同類型)創建對象X,即根據情況,Y的屬性可以用來以不同的方式初始化X.一種方法是,使用默認構造函數創建一個對象X,然後設置它的屬性,但它有一個缺點,即如果出現問題,那麼我們有一個處於不一致狀態的對象。另一種方法是用虛擬參數爲所有情況創建不同的構造函數,這聽起來很糟糕。 有什麼好的設計模式可以在這裏使用?以不同方式從另一個對象創建對象的設計模式
4
A
回答
5
如果兩個對象都是同一類型的,你可以使用工廠方法:
public class Foo {
...
public Foo withBar(...) {
Foo f = new Foo(this.param);
f.setBar(...);
return f;
}
public Foo withBaz(...) {
Foo f = new Foo(this.param);
f.setBaz(...);
return f;
}
}
...
Foo y = ...;
Foo x = y.withBar(...);
如果類型不同,可以使工廠方法靜態和套印Y作爲參數。
3
聽起來像你可以使用Factory Pattern的稍微專用版本。例如。構建對象的一部分可能是將現有實例(或實例的接口)傳遞給初始化新對象。
0
除了工廠模式,請看Builder Pattern。這種模式允許客戶端配置對象的構造方式。
0
這聽起來像是Abstract Factory模式的情況。
2
工廠模式的很好的解釋可以找到here。
也約書亞布洛赫是他的書有效的Java建議使用另外使用「工廠法」靜態工廠
相關問題
- 1. 創建對象的設計模式
- 2. 創建對象的設計模式
- 3. Java對象創建模式和設計
- 4. 設計模式 - 不同的對象,返回相同的對象
- 5. 從另一個對象創建對象
- 6. 創建Javascript對象的不同方式?
- 7. 設計模式繪製單個對象的不同方法
- 8. 對象和對象元模式設計
- 9. 從文件創建對象的設計模式?
- 10. 用於創建一組數據對象的設計模式
- 11. 查詢對象模式(設計模式)
- 12. 從軌道中的另一個對象創建一個對象
- 13. 從c#中的另一個對象創建的對象的形式
- 14. 對象創建鏈模式
- 15. 複製模板對象以從中創建一個新對象
- 16. Unity3d - 以統一方式從現有對象中創建新的遊戲對象
- 17. Rails設計模式:同一對象的多個「透視圖」
- 18. 從另一個對象類型創建一個對象
- 19. 以Python方式創建對象
- 20. 以靜態方式創建對象
- 21. 在類中創建更多對象的面向對象的設計模式(c#)
- 22. JavaScript - 構建對象的不同方式
- 23. 在另一個對象中創建的模擬對象
- 24. 可以使用不同模式創建多層對象?
- 25. 將字段從一個對象映射到另一個對象的設計模式
- 26. 用於從更復雜的對象構建對象的設計模式
- 27. 如何爲不同的對象設計一個接口以在構建器設計模式中使用它們?
- 28. 在另一個類中使用抽象類對象的C++設計模式
- 29. 創建從在另一個對象
- 30. 反覆創建對象的設計模式
將Y(不同類型)作爲參數傳遞給X的構造函數是否很好?等等,'公共Foo(Bar y){...}' – zygimantus 2015-12-15 08:37:36