Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的工厂与工厂方法模式#_C#_.net_Design Patterns_Factory Pattern_Factory Method - Fatal编程技术网

C# c语言中的工厂与工厂方法模式#

C# c语言中的工厂与工厂方法模式#,c#,.net,design-patterns,factory-pattern,factory-method,C#,.net,Design Patterns,Factory Pattern,Factory Method,有人能帮我理解以下关于工厂方法模式的查询吗 我引用链接作为示例 1.工厂方法模式中抽象类工厂的需求是什么?什么 如果使用普通类 2.声明代码的更改不会影响客户。但是 如果添加了一个新的类product3,则 客户代码也需要更改。(按照以下代码)。那么这种设计模式的优势是什么 3.objFactories[0]=new-concreteFactoryforProduct1()的好处是什么overconcreteFactoryforProduct1工厂=新的concreteFactoryforPro

有人能帮我理解以下关于工厂方法模式的查询吗

我引用链接作为示例

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

2.声明代码的更改不会影响客户。但是 如果添加了一个新的类product3,则 客户代码也需要更改。(按照以下代码)。那么这种设计模式的优势是什么

3.
objFactories[0]=new-concreteFactoryforProduct1()的好处是什么
over
concreteFactoryforProduct1工厂=新的concreteFactoryforProduct1()

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

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

(2) 这只是一个演示。地球上没有任何用例可以列出可用的工厂

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


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

1)但我正在创建实例objFactories[0]=new-concreteFactoryforProduct1();2) 我不清楚你想解释什么。3) 为什么要在那里使用OBJFactorys[0”?为什么我不能使用类实例?优点是什么?(1)是的,没关系,您没有调用new Factory()->constructor。只是引用类型。(2) 实际上,如果您想要一个由Factory1创建的对象,只需创建一个实例(最好是Singleton)并调用其方法。(3) 在这里,如果没有这些,你怎么能在同一个数组中插入两种类型的混凝土工厂呢?我理解你的观点。但是您正在解释模式实现,我在问使用这种方式的好处。仅此示例使用数组。您可以有许多直接分配给工厂抽象实例的示例。@TomCruise我想您是在问(3)。我明白你的意思。使用抽象的一个优点是。以此为例<代码>工厂myFactory=new-concreteFactoryforProcuct1()
因为您的引用类型是
工厂
,所以如果将来需要,您可以这样做<代码>myFactory=new-concreteFactoryforProcuct2()并且您也可以参考此。我问。:)
    Factory[] objFactories = new Factory[2]; 
    objFactories[0] = new concreteFactoryforProduct1(); 
    objFactories[1] = new concreteFactoryforProduct2(); 
    foreach (Factory objFactory in objFactories) 

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