Oop 在抽象工厂模式中,主要的抽象工厂类,它总是必须是一个抽象类吗?
我看到的所有抽象工厂模式的示例都使用抽象类为工厂提供抽象。Oop 在抽象工厂模式中,主要的抽象工厂类,它总是必须是一个抽象类吗?,oop,design-patterns,software-design,Oop,Design Patterns,Software Design,我看到的所有抽象工厂模式的示例都使用抽象类为工厂提供抽象。 是否始终需要使用抽象类 在这种情况下,我们可以愉快地使用界面 如果我们使用接口是否会违反设计原则 我正在读的例子 接口及其方法是隐式的抽象的,因此使用接口而不是抽象CAS,是完全可以的,但为了实现抽象设计,必须实现这两者中的一个…1.工厂是一个抽象类。 2.工厂可以创建接口或抽象类的任何子类。 3.工厂方法返回类型是接口或抽象类。工厂不需要使用抽象类。这主要取决于您想要创建的对象的复杂性,以及您可以在工厂中重用多少代码 您链接到的示例
是否始终需要使用
抽象类
在这种情况下,我们可以愉快地使用界面如果我们使用接口是否会违反设计原则 我正在读的例子
接口
及其方法是隐式的抽象的
,因此使用接口
而不是抽象CAS
,是完全可以的,但为了实现抽象设计,必须实现这两者中的一个…1.工厂是一个抽象类。2.工厂可以创建接口或抽象类的任何子类。
3.工厂方法返回类型是接口或抽象类。工厂不需要使用
抽象类。这主要取决于您想要创建的对象的复杂性,以及您可以在工厂中重用多少代码
您链接到的示例是为了演示抽象工厂模式的使用而精心设计的。该示例创建一个抽象工厂(工厂的“接口”),然后使用ShapeFactory
和ColorFactory
对其进行扩展。调用getColor()
时,concreteShapeFactory
返回null,反之亦然。这违反了法律
相反,我建议采用这种设计,以表明您并不总是需要抽象工厂,但也可以使用更简单的工厂
如下所示使用混凝土ShapeFactory:
var factory = new ShapeFactory();
var circle = factory.CreateShape(ShapeType.Circle);
编辑:只是吹毛求疵。。。在抽象工厂模式中,基础工厂总是抽象的。这是因为它将创建的基类(或接口)本身不可用。实际上,您可以使用圆形
或方形
,但不能使用形状
。这并不意味着你的代码一般不能处理形状。使用接口就像使用抽象类一样好。很抱歉,我不明白答案。你能详细说明一下吗?
var factory = new ShapeFactory();
var circle = factory.CreateShape(ShapeType.Circle);