在Delphi中,关于对接口(Interface)的理解,就像是有一百个人就有一百个对上帝的理解一样:一百个人就有一百个上帝。  接口(Interface)本身是一种约定,它约定了可以“做什么”,它并不关心“怎么做”。它本身并没有任何实现。  要说接口(Interface)确实强大,是因为它确实够“虚”,“虚”到没有任何实现,因为它一但有哪怕一点实现,它就被写死了,就被确定下来了。所以说在面向对象的世界中“虚”比“实”更加强大。  接口(Interface)与类的关系  接口(Interface)虽然强大,但它的最终实现却是需要由包含接口的类实现的。    对于一个小的系统来说,可能不需要使用接口,想怎么写就怎么写,大不了推倒了重来。但对于一个大的项目或者对一个公司的一个系列产品来说,使用接口来抽象项目中的不同功能模块的相关动作(对外部的)来构成项目的相关模块的对外行为框架(只在内部使用的行为当然最好用抽象方法);然后使用抽象类建立项目的对象框架;就是完全必要的。因为它们才是真正最稳定的,它结合了传统的面向对象中建立高端的抽象类建立对象框架的方法,使之更进一步,抽象程度更高!也更加灵活,程序的适应性会更强。  简单说:接口(Interface)抽象了对象的对外行为,它使对象的对外行为最终确定下来,成为稳定部分,它是对象与其它对象之间交互的接口;抽象类抽象了对象,它使对象框架稳定下来,它们之间的合作最终形成了整个项目的稳定框架。  接口(Interface)与抽象类是相辅相成的,它们是没有谁优谁劣,它和抽象类虽然有相似之处但却是不能完全替代的。

解决方案 »

  1.   

    抛开语言层面的特性不谈,我个人的体会是,接口可以让我们更关注系统和业务层面的分割,一个接口设计的好不好取决于你对领域的理解是否正确,对未来系统的变化(CHANGE)是否有足够的预知。而抽象类和接口不同的是,它更关注不同对象之间的共同行为和属性,并提供默认的实现,扩展起来也很方便。我一般的做法是,不同模块之间使用接口来分离,而抽象类一般用在领域层和一些扩展基类。P.S. 2年前,我负责开发一套智能会员卡系统(产品),当初考虑到以后要支持多种卡片格式和卡机类型,就定义了一个卡机接口,2年多过去了,无论两边的模块怎么变化,该接口一直很“稳定”,这点偶也很满足:)
      

  2.   

       ZuoBaoquan 说的好!和我的作法相同.   使用接口作为对象之间行为交互的方式,它比用抽象类更加纯净.更加符合面向对象思想.
      

  3.   

        接口误解之一:接口方法的速度比抽象方法要慢!    怎么会慢呢?接口方法的实现可以使用静态方法,也可以是虚方法.静态方法不用说了,它肯定比抽象方法快!如果是用虚方法实现接口方法,它和抽象方法一样(接口不能用用动态方法,所以这里不讨论抽象中使用动态方法这种情况)都是使用VMT,它怎么会慢呢?