动态语言界面?

Shu*_*huo 7 dynamic-languages interface

接口(或所有方法抽象的抽象类)是静态类型语言(如C#,JAVA)中的强大武器.它允许以统一的方式使用不同的派生类型.设计模式鼓励我们尽可能地使用界面.

但是,在动态类型语言中,在编译时不会检查所有对象的类型.它们不必实现以特定方式使用的接口.您只需要确保它们定义了一些方法(属性).这使得接口不是必需的,或者至少不像在静态语言中那样有用.

典型的动态语言(例如ruby)是否具有接口?如果确实如此,那么拥有它有什么好处?如果没有,那么我们是否会失去许多需要界面的漂亮设计模式?

谢谢.

小智 2

我想所有动态语言都没有单一的答案。例如,在Python中,没有接口,但有多重继承。使用类似接口的类仍然有用:

  • 类似接口的类可以提供方法的默认实现;
  • 鸭子打字很好,但在一定程度上;有时能够编写 是很有用的isinstance(x, SomeType),特别是当SomeType包含许多方法时。

  • 如果一个类提供默认实现,那么它就不像接口,因为接口与抽象类的不同之处在于它们不能包含任何实现。 (3认同)