我有点理解一个接口是一个契约,可以应用于那些没有任何共同点的类(例如:Java中的Comparable)。但是,在什么情况下你会在设计阶段有反射添加界面?
答案 0 :(得分:5)
“我有点理解一个接口是一个合同,可以应用于本来没有任何共同点的类” - 这可能不是思考接口是什么的方式。
接口描述行为,实现接口意味着类进入合同以提供该行为。
通过编程到接口而不是实现,您可以启用多态并获得具有更低耦合的更灵活的代码。例如,此方法可以采用任何实现IQuack
的实例:
public void DoSomething(IQuack quacker)
{
// ...
}
答案 1 :(得分:5)
每当您使用静态类型语言时,您希望开发人员在提供替代实现时使用您的代码 - 换句话说,在这种语言中,必须实现低(呃)耦合。
使用ducktyping作为规则的语言,而不是严格的类型检查,例如python,通常不需要接口。
答案 2 :(得分:2)
如果您正在设计产品并且您知道该产品将与某种类型的设备,服务等进行交互,但不一定与哪种产品相互作用,您可以使用界面继续推进整体架构,提供您已足够的知识关于那些类型的设备来编写可以由该类型的任何给定设备成功使用的接口。当然,如果你处于设计阶段,你最好掌握这些知识。仅使用接口声明进行高级设计并不罕见。我并不是说这是好还是坏,但对于那些使用软件(如Rose等)从UML生成骨架的人来说,这似乎是一种非常普遍的做法。
如果您确切地知道将要使用哪种设备,那么另一次会是这样,但您认为可能需要在未来使用该设备的不同或多种类型。
接口的第三种用法是减少重复的代码。这可能是人们用界面使用的唯一地方,如果不是这样,我会很自在地说“不应该这是一个界面吗?”但“这可以是一个界面吗?”。