我对设计模式比较陌生,在我正在从事的一个项目中使用了GangOfFour抽象工厂模式。我想知道引入名为FileName的字符串类型的属性的最佳方式,混凝土工厂生产的所有抽象产品都需要该属性。我会吗?
将其添加到Abstract Factory接口,以便它必须沿着树向下实现,并传递到返回的Product的构造函数中。即使该接口只关心创建工厂?
我将使用GoF .Net优化代码的一部分来使用一个简单的示例,任何其他学习这些模式的人都会熟悉它,并可能在未来提供一个很好的参考点。
/// <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();
}
}发布于 2010-01-04 05:51:09
我认为这取决于由工厂和工厂本身创建的对象的性质。如果不能在没有某些信息的情况下创建它(比如本例中的FileName ),那么您有两个选择:要么您的工厂知道这些数据,要么您需要将其提供给工厂(这里的一个选项是在方法调用期间传递该数据)。否则,如果从创建的角度来看,此信息是可选的,则您不应该使用此信息来扰乱工厂,并将此负担放在调用代码上(例如,可以在对象从工厂返回后立即将所创建对象的FileName属性设置为必需的值)。
https://stackoverflow.com/questions/1996436
复制相似问题