我对设计模式相对较新,并且在我正在进行的项目中使用GangOfFour抽象工厂模式。我想知道引入一个名为FileName的字符串属性的最佳方法,该属性是Concrete Factory生成的所有抽象产品所必需的。我会
吗?将其添加到Abstract Factory接口,以便它必须在树下实现并传递到返回的Product的构造函数中。即使该界面只涉及创建工厂?
我将使用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();
}
}
答案 0 :(得分:1)
我认为这取决于工厂和工厂自己创建的对象的性质。如果在没有某些信息(例如本例中为FileName)的情况下无法创建它,您有两个选择:您的工厂知道数据或您需要将它提供给工厂(这里的选项之一是在方法调用期间传递该数据)。否则,如果从创建的角度来看这个信息是可选的,那么你不应该把工厂弄得乱七八糟,把这个负担放在调用代码上(例如,在从工厂返回对象后,可以将创建对象的FileName属性设置为必要的值) )。