是否有可能讓具體工廠使用抽象工廠模式創建具有類型特定參數的具體類?還是由他們各自的混凝土工廠創建的不同具體類需要具有相同的領域?在下面的圖像中,你將如何用客戶端(應用程序)給出的不同參數集來實例化WinButton和OSXButton?如何爲抽象工廠創建的類設置特定屬性?
回答
一種解決這些問題的方法之一是發送對象的參數。例如,在C#中Object是基類&您可以傳遞可以接受任何派生類的Object類型的參數。在實現中,這個對象可以被轉換回所需的派生類型。甚至可以通過這種方式設置特定的屬性。
沒有更多細節,這並不容易。我會做的一件事是嘗試將參數傳遞給具體工廠類的構造函數。對於不同的參數,你將不得不創建不同的工廠實例,這可能不是最好的解決方案,但如前所述,這取決於細節。
例子:
GUIFactory factory = new WinFactory(WIN_9x_THEME); Button greyButton = factory.createButton(); factory = new WinFactory(WIN_VISTA_THEME, 50); Button semiTransparentButton = factory.createButton();
這是做這件事的一種方式,但你有點遺漏模式的抽象性,因爲正如你所指出的那樣,工廠類將不得不爲每一組新的參數值重新實例化。你可以直接實例化concrecte類而不是通過工廠類。 – Christian 2011-06-27 06:26:08
@Christian:不是真的......如果你在編碼過程中知道各組參數的組合,你可以爲工廠設置工廠 - 這有點複雜,所以基於依賴注入的解決方案更有意義。最後,這一切都取決於具體的語言和應用。 – 2011-06-27 08:11:29
嗯......工廠工廠;你可能有代碼示例?關於它取決於語言和應用程序,是不是模式應該是語言和應用程序不可知的? – Christian 2011-06-27 20:30:34
- 1. 如何在python抽象類中創建抽象屬性
- 2. 爲工廠創建抽象工廠是否有意義?
- 3. 將屬性添加到抽象工廠
- 4. 如何用靜態工廠方法創建抽象類?
- 5. 抽象類工廠方法
- 6. FactoryGirl RSpec創建工廠對象時沒有方法錯誤,其中工廠設置了該對象的屬性
- 7. 抽象工廠
- 8. 如何創建工廠爲通用類
- 9. 設置屬性爲動態創建的類不工作在javascript
- 10. ASP.NET如何將屬性設置爲特定類型的
- 11. 配置在抽象類上定義的Autofac委託工廠
- 12. 如何在Typescript中創建抽象工廠模式?
- 13. FactoryGirl在工廠中設置updated_at屬性
- 14. 創建對象並設置屬性
- 15. 春天設置抽象豆屬性值
- 16. 工廠和抽象工廠模式
- 17. 抽象工廠設計模式 - C#
- 18. 設計模式 - 抽象工廠 - BombedMazeFactory
- 19. 抽象工廠設計模式c#
- 20. 創建抽象類
- 21. DDD我可以使用抽象工廠創建域對象
- 22. 作爲戰略的抽象工廠?
- 23. 工廠類與抽象方法
- 24. 模板抽象工廠類與池
- 25. JDBC如何使用抽象工廠?
- 26. 如何應用抽象工廠模式?
- 27. 如何設置域對象創建的版本屬性?
- 28. 工廠或構造函數 - 在哪裏設置對象屬性?
- 29. 爲抽象類創建對象
- 30. Css設置屬性爲h2爲h6爲特定類
使用Object類的泛型類型,然後將其投射到一個特定的類不是因爲它很好的解決不是類型安全的,它違反了至少一個面向對象的原則即Liskov替代原則。此外,要創建的具體類可能需要爲其各自的構造提供不同數量的參數。 – Christian 2011-05-19 06:34:32
我同意,它不是類型安全的。關於不同數量的參數,你可以有一個由其他類型組成的類型。 – 2011-05-19 07:41:51
您的意思是一個數據結構,您可以在其中存儲不同具體類型的創建參數?在這種情況下,每次添加新結構時都必須更改數據結構。 – Christian 2011-05-19 10:05:30