代码之家  ›  专栏  ›  技术社区  ›  Cragly

向抽象工厂添加属性

  •  1
  • Cragly  · 技术社区  · 16 年前

    我对设计模式比较陌生,在我正在进行的一个项目中,我正在玩弄Gangoffour抽象工厂模式。我想知道引入一个名为filename的字符串类型属性的最佳方法,该属性对于由一个具体工厂生产的所有抽象产品都是必需的。我可以吗

    将它添加到抽象工厂接口,这样就必须沿着树实现它,并将其传递到返回产品的构造函数中。即使那个接口只关心创建工厂?

    我将使用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();
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  1
  •   Dzmitry Huba    16 年前

    我认为这取决于工厂和工厂本身创造的物体的性质。如果在没有某些信息(如本例中的文件名)的情况下无法创建它,您有两个选择:要么您的工厂知道该数据,要么您需要将其提供给工厂(这里的一个选项是在方法调用期间传递该数据)。否则,如果从创建的角度来看,此信息是可选的,则不应将工厂与此混淆,并将此负担加在调用代码上(例如,在从工厂返回对象后,可以将所创建对象的文件名属性设置为必需的值)。

    推荐文章