Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Oop 在抽象工厂模式中,主要的抽象工厂类,它总是必须是一个抽象类吗?_Oop_Design Patterns_Software Design - Fatal编程技术网

Oop 在抽象工厂模式中,主要的抽象工厂类,它总是必须是一个抽象类吗?

Oop 在抽象工厂模式中,主要的抽象工厂类,它总是必须是一个抽象类吗?,oop,design-patterns,software-design,Oop,Design Patterns,Software Design,我看到的所有抽象工厂模式的示例都使用抽象类为工厂提供抽象。 是否始终需要使用抽象类 在这种情况下,我们可以愉快地使用界面 如果我们使用接口是否会违反设计原则 我正在读的例子 接口及其方法是隐式的抽象的,因此使用接口而不是抽象CAS,是完全可以的,但为了实现抽象设计,必须实现这两者中的一个…1.工厂是一个抽象类。 2.工厂可以创建接口或抽象类的任何子类。 3.工厂方法返回类型是接口或抽象类。工厂不需要使用抽象类。这主要取决于您想要创建的对象的复杂性,以及您可以在工厂中重用多少代码 您链接到的示例

我看到的所有抽象工厂模式的示例都使用抽象类为工厂提供抽象。
是否始终需要使用
抽象类

在这种情况下,我们可以愉快地使用界面
如果我们使用接口是否会违反设计原则

我正在读的例子



接口
及其方法是隐式的
抽象的
,因此使用
接口
而不是
抽象CAS
,是完全可以的,但为了实现抽象设计,必须实现这两者中的一个…

1.工厂是一个抽象类。
2.工厂可以创建接口或抽象类的任何子类。

3.工厂方法返回类型是接口或抽象类。

工厂不需要使用
抽象类。这主要取决于您想要创建的对象的复杂性,以及您可以在工厂中重用多少代码

您链接到的示例是为了演示抽象工厂模式的使用而精心设计的。该示例创建一个抽象工厂(工厂的“接口”),然后使用
ShapeFactory
ColorFactory
对其进行扩展。调用
getColor()
时,concrete
ShapeFactory
返回null,反之亦然。这违反了法律

相反,我建议采用这种设计,以表明您并不总是需要抽象工厂,但也可以使用更简单的工厂

如下所示使用混凝土ShapeFactory:

var factory = new ShapeFactory();
var circle = factory.CreateShape(ShapeType.Circle);

编辑:只是吹毛求疵。。。在抽象工厂模式中,基础工厂总是抽象的。这是因为它将创建的基类(或接口)本身不可用。实际上,您可以使用
圆形
方形
,但不能使用
形状
。这并不意味着你的代码一般不能处理形状。

使用接口就像使用抽象类一样好。很抱歉,我不明白答案。你能详细说明一下吗?
var factory = new ShapeFactory();
var circle = factory.CreateShape(ShapeType.Circle);