1

我有点将接口理解为可以应用于没有共同点的类的合同(例如:Java 中的 Comparable)。但是,在什么情况下,您会有在设计阶段添加界面的反射?

4

3 回答 3

5

每当您使用静态类型语言时,并且您希望开发人员可以在提供替代实现的同时使用您的代码 - 换句话说,在这种语言中,有必要实现低(er)耦合。

通常使用鸭子类型而不是严格类型检查的语言,例如 python,通常不需要接口。

于 2010-12-29T01:21:47.193 回答
5

“我有点将接口理解为一种契约,它可以应用于本来没有任何共同点的类”——这可能不是思考接口是什么的方式。

接口描述行为,实现接口意味着类进入契约以交付该行为。

通过对接口而不是实现进行编程,您可以启用多态性并获得更灵活且耦合度更低的代码。例如,此方法可以采用任何实现的实例IQuack

public void DoSomething(IQuack quacker)
{
    // ...
}
于 2010-12-29T01:19:27.760 回答
2

如果您正在设计一个产品,并且您知道该产品将与一种设备、服务等进行交互,但不一定是哪种,您可以使用界面来推进整体架构,前提是您对这些类型有足够的了解设备来编写一个接口,该接口可以被该类型的任何给定设备成功使用。当然,如果您处于设计阶段,您最好掌握这些知识。仅使用接口声明进行高级设计并不少见。我并不是说它是好是坏,但这似乎是那些使用软件(如 Rose 等)从 UML 生成骨架的人的一种非常普遍的做法。

另一种情况是,如果您确切知道要使用什么设备,但您认为将来可能需要使用不同或多种类型的设备。

接口的第三种用途是减少重复代码。这可能是人们唯一对界面使用着迷的地方,如果不是因为这样,我会很自在地说不要问“这应该是一个界面吗?” 但是“这可以是一个接口吗?”。

于 2010-12-29T02:17:13.347 回答