为什么Abstract Factory使用抽象类而不是接口?

use*_*362 8 c# oop design-patterns abstract-factory

我正在学习设计模式,本书的第一个例子是关于抽象工厂.我在VS中建立了这个练习并且看起来都很好,但是有一个我想知道的问题.

在本书中,工厂类是这样实现的:

public abstract class AbstractVehicleFactory
{
    public abstract IBody CreateBody();
    public abstract IChassis CreateChassis();
    public abstract IGlassware CreateGlassware();
}
Run Code Online (Sandbox Code Playgroud)

完成练习后,我注意到上面的类可以用以下代码替换:

public interface IAbstractVehicleFactory
{
      IBody CreateBody();
      IChassis CreateChassis();
      IGlassware CreateGlassware();
}
Run Code Online (Sandbox Code Playgroud)

当然这两个例子的功能完全相同,但我想知道使用抽象类而不是接口的原因是什么?

Ale*_*kov 7

" 抽象工厂 "中的"抽象"与"抽象"无关abstract class.抽象工厂是混凝土工厂的"基础",但设计模式本身并不强制执行任何特定的实施.抽象工厂可以是抽象的,甚至是具体的类,接口或某种形式的duck typed对象,具体取决于您使用的语言.

确实在C#interface中指定抽象工厂是非常合理的方式.


Pie*_*ens 6

抽象类可以小心翼翼地以不间断的方式扩展; 对接口的所有更改都是重大更改.

更新:
相反,接口可以是inout类型参数,而抽象类不能.有时候一个或另一个更适合给定的设计,有时它是一个折腾.