2010-01-03 99 views
1

我對設計模式比較陌生,並在我正在開發的項目中使用GangOfFour抽象工廠模式。我想知道引入一個叫做FileName的字符串屬性的最好方法,它是混凝土工廠生產的所有抽象產品所需要的。我會將屬性添加到抽象工廠

將它添加到抽象工廠接口,以便它必須在樹中實現並傳遞到返回的產品的構造函數。即使該界面只關心創建工廠?

我將使用一段GoF .Net Optomised代碼來使用一個示例,因爲任何學習這些模式的人都會熟悉它,並且可能在將來提供一個很好的參考點。

/// <summary> 
/// The 'AbstractFactory' interface. 
/// </summary> 
interface IContinentFactory 
{ 
    // Define property in here?? 
    IHerbivore CreateHerbivore(); 
    ICarnivore CreateCarnivore(); 
} 

/// <summary> 
/// The 'ConcreteFactory1' class. 
/// </summary> 
class AfricaFactory : IContinentFactory 
{ 
    // Implement property in here?? 
    public IHerbivore CreateHerbivore() 
    { 
     return new Wildebeest(PassInPropertyHere??); 
    } 

    public ICarnivore CreateCarnivore(PassInPropertyHere??) 
    { 
     return new Lion(); 
    } 
} 

回答

1

我認爲這取決於工廠和工廠自己創建的對象的性質。如果沒有一些信息(如本例中的FileName)就無法創建它,那麼您有兩種選擇:您的工廠知道該數據或者需要將其提供給工廠(其中一個選項是在方法調用期間傳遞該數據)。否則,如果從創建的角度來看這個信息是可選的,那麼你不應該把工廠混亂並且把這個負擔放在調用代碼上(例如,對象從工廠返回後,創建對象的FileName屬性可以設置爲必要的值)。

+0

謝謝,多數民衆贊成我正在尋找。我不喜歡混淆工廠的想法,但不確定這樣做是否可以接受。 – Cragly 2010-01-04 10:23:08