【问题标题】:factory vs factory method pattern in c#C#中的工厂与工厂方法模式
【发布时间】:2016-08-22 08:11:50
【问题描述】:

谁能帮我理解以下关于工厂方法模式的查询?

我将 this 链接作为示例。

1.工厂方法模式中抽象类Factory需要什么?什么 如果使用普通类?

2.声明修改代码不会影响客户端。但 如果添加了一个新的类 product3,一个适当的 客户端代码也需要更改。(根据以下代码)。那么这种设计模式有什么优势呢?

3.objFactories[0] = new concreteFactoryforProduct1(); 比concreteFactoryforProduct1 factory = new concreteFactoryforProduct1(); 有什么好处

    Factory[] objFactories = new Factory[2]; 
    objFactories[0] = new concreteFactoryforProduct1(); 
    objFactories[1] = new concreteFactoryforProduct2(); 
    foreach (Factory objFactory in objFactories) 

     { 
            Product objProduct = objFactory.GetProduct(); 
            objProduct.GetDetails(); 
        } 

4.为什么我们不能在简单的设计模式中实现开闭原则?

【问题讨论】:

    标签: c# .net design-patterns factory-pattern factory-method


    【解决方案1】:

    (1) 根据抽象类的最简单用法,添加抽象可避免使用 new Factory() 创建实例。 (因为它没有意义,就像动物和大象一样->动物只是一个抽象,不存在称为动物的实体)

    (2) 这只是一个演示。世界上没有用例来列出可用的工厂。

    (3) 在示例中,它是一个工厂数组,您的问题不适用。

    (4) 我认为您是在询问不使用工厂方法模式的情况。可能有很多情况。您可以确定是否尝试实施它。

    【讨论】:

    • 1) 但我正在创建实例 objFactories[0] = new concreteFactoryforProduct1(); 2)我不清楚你试图解释什么。 3)我为什么要在那里使用 objFactories[0] ?为什么我不能使用类实例?有什么优势?
    • (1) 是的,没关系,您没有调用 new Factory() -> 构造函数。只是引用类型。 (2) 实际上,如果你想要一个由 Factory1 创建的对象,你只需创建一个实例(最好是 Singleton)并调用它的方法。 (3) 在这里,没有那个你怎么能在同一个数组中插入两种类型的具体工厂?
    • 我明白你的意思。但是您正在解释模式实现并且我询问使用这种方式的优势。只有这个例子它使用数组。您可以有许多直接分配给工厂抽象实例的示例。
    • @TomCruise 我想你在问(3)。我明白你的意思了。使用抽象的一个优点是这一点。以此为例。 Factory myFactory = new concreteFactoryforProcuct1(); 因为您的引用类型是 Factory,如果您将来需要,您可以执行类似的操作。 myFactory = new concreteFactoryforProcuct2(); 你也可以参考这个。 stackoverflow.com/questions/38006956/… 我问的。 :)
    猜你喜欢
    • 2011-05-11
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多