`

接口的意义

    博客分类:
  • Java
阅读更多

       插件式框架作为一个高聚合低耦合的系统,它的功能定义与功能实现之间是分离的,这种策略是高聚合实现的保证。插件式框架好像一个功能聚集站,它对外界宣 布,只要符合它发布的某种规范的组件(实现接口的类通常称为组件)都可以加入到这个平台中,而这些组件到底是做什么事情的,框架并不关心,当然,框架也提 供了一些必要的信息和帮助保证这些组件能够正常实现它们的功能。
       桥接模式是一种被认可的表示定义和与之关联的实现的方式,它和工厂(Factory)模式为所有的应用提供了基础。使用桥接模式开发的组件具有为了一个共同目标而多方协同工作除某些必须实现的接口外无需彼此交互的优点。
       在具有多个逻辑层的程序设计中,各层之间的通讯大多通过接口实现,由于接口不会轻易改变,如果一个层的代码发生变化,它不会影响其它层的功能;只要实现接口的组件功能正确,那么这个程序运行就更无问题。这种做法使得各层之间的影响降低到最低程度。
      接口是类型一般行为的定义和契约。例如交通工具都包含启动、停车、加速和减速等方法,但作为交通工具的具体类型,不同车辆之间的操作是不一样 的。接口并不考虑它们各自采用什么方式实现这些功能,但是,它们都必须有这些基本的功能。接口只负责定义而不考虑实现,我们也不能产生一个接口的实例对象 (Instance)。
      实现了接口的类或结构都必须实现接口中定义的每一个方法,这些方法在设计上往往是相关的。
      接口与抽象类非常相似,例如两者都不能产生实例对象,都可以作为一种契约和定义使用。但接口和抽象类仍有本质的不同,这些不同包括:

  1. 抽象类可以包含某些实现代码,但接口没有任何实现部分;
  2.   抽象类可以包含字段而接口没有;
  3. 接口可以被结构(Struct)继承,但抽象类不行;
  4. 抽象类可以有构造函数和析构函数,而接口都没有;
  5. 抽象类可以继承自其它类和接口而接口仅仅能继承自接口;
  6. 接口支持多继承而抽象类仅仅支持单根继承。


      下面是抽象类和接口的对比例子:

public abstract class AClass {
       abstract public void MethodA (int a);
       abstract public void MethodB (int a);
       abstract public void MethodC (int a);
       abstract public void MethodD (int a);
}

public interface IInterface {
       void MethodA (int a);
       void MethodB (int a);
       void MethodC (int a);
       void MethodD (int a);
}
      即使不从桥接模式的观点考虑,多种面向对象语言都引入了接口这种类型定义还有一个重要原因:一个类可以实现多个接口。在大部分面向对象语言中, 多重继承都是被禁止的,这是因为当编译器需要找到虚方法的正确实现时,会出现不确定性。但是接口并没有实现的部分,实现多个接口,并非意味着类 (Class)那样的继承,它也绝非是多重继承机制的替代品。
      我们常常将接口与抽象类混淆,事实上,两者的表象过于一致。但接口用来定义两个对象通信的契约,抽象类用来封装对象间公用的行为;抽象类应主要 用于关系密切的对象,而接口最适合为不相关的类提供通用功能。二者设计起初的目标完全不同,但在实际应用中被太多的人误解。这个原理在 ArcObjects库中显露无遗:不同类型的组件互相调用是通过接口,而同一类型的对象群,如Color,则是通过抽象类组织在一起的,即接口是对外通讯的,抽象类是对内组织的。
分享到:
评论

相关推荐

    c#接口的意义 学习心得 读书笔记 (彻底弄清楚接口,轻松使用接口)

    c#接口的意义 学习心得 读书笔记 (彻底弄清楚接口,轻松使用接口) c#接口的意义 学习心得 读书笔记 (彻底弄清楚接口,轻松使用接口)

    如何利用keil的AGSI接口

    keil是一款嵌入式领域非常流行的编译软件,但却无法在没有硬件支持的情况下进行软件的模拟仿真,于是Keil提供了AGSI接口,支持在没有硬件的情况下也可以进行软件的模拟仿真。而仿真后的代码可直接在响应的硬件平台上...

    EGE图形库,面向C/C++语言新手的图形库

    它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。 目前,EGE图形库已经完美支持VC6, ...

    ege13.04图形库

    它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。 目前,EGE图形库已经完美支持VC6, ...

    EGE_for_Visual_Studio_2017 EGE图形库

    它的使用方法与TC中的graphics.h相当接近,对新手来说,简单,友好,容易上手,免费开源,而且因为接口意义直观,即使是之前完全没有接触过图形编程的,也能迅速学会基本的绘图。 目前,EGE图形库已经完美支持VC6, ...

    JavaScript 接口原理与用法实例详解

    意义: 提供一种以说明一个对象应该有哪些方法的手段。 接口是面向对象javascript程序员的工具箱中最有用的工具之一 接口的利弊: 对于一些中小型程序来说 使用接口很显然是不明智的,对项目来说接口的好处也不...

    DB15 DSUB VGA接口图

    详细描述VGA,DSUB,DB15接口尺寸,对于硬件开发具有指导意义

    接口测试面试题.docx

    接口测试是测试系统组件间接口的一种测试。 接口测试的重点是检查数据的交换,传递的正确性,以及接口间逻辑依赖...提交接口测试的重要意义:实现开发期并行测试,减少页面层测试的深度,缩短整个项目的测试周期。

    百川大语言模型fastapi接口服务

    下面是大语言模型FastAPI接口服务的一些意义和作用: 便捷的接口调用:FastAPI框架可以帮助开发者快速地构建出RESTful风格的API接口,这样,其他的应用或服务就可以通过HTTP请求来调用大语言模型,进行文本生成、...

    博客资源-《java基础——接口》

    博客《java基础——接口》的示例代码,通过标记接口分类,展示继承、多继承等效果,便于体会接口的意义。

    接口的实现

    1.理解接口的意义 2.掌握接口的C#实现

    软件测试-接口测试.rar

    |第一章|接口测试基础|接口测试的定义 接口测试的意义 第一个实例| |第二章|接口测试用例设计|接口测试用例设计方法 单接口用例分析与设计 面向场景的接口用例分析与设计 | |第三章|接口测试...

    一种基于PWM的CMOS数据接口电路设计

    对实现片上IP核之间、乃至芯片之间的互连有参考意义。  1 引言  随着电路系统需求的扩展,集成电路设计与制造技术的进步,现代数字系统多工作在几百Mbps的速率上,这些高速系统常包含多个电路模块。系统中不同...

    通讯接口RS485的电磁兼容设计方案归纳.pdf

    本文归纳、总结了RS485总线接口的EMC、防雷等抗干扰和保护的硬件设计,文中有具体的原理讲解,电路原理图设计、元器件参数和PCB图纸参考设计。对于RS485、RS422、CAN等二线式总线的电路设计具有非常实用的参考意义。

    matlab股票自动交易接口.zip

    matlab股票自动交易接口.zip,matlab股票自动交易接口,一个连接券商交易端口的程序的例子 有一定参考意义

    SQL与Oracle接口的实现在企业信息化中的意义.pdf

    SQL与Oracle接口的实现在企业信息化中的意义.pdf

    Java中抽象类和接口的区别与作用详解

    abstract class,只可以包含抽象方法,也包括一些常量的定义,丝毫不带半点实现细节,它只提供接口,可以有数据成员,默认是、同时也必须是static & final型,可以通过Interface name直接访问。Interface可以实现...

    完整接口自动化框架代码

    一个完整可用的接口自动化框架源码含接口数据及设计文档,该框架对于想从事接口自动化的小伙伴,可以直接使用,对于从事多年的接口自动化的框架的人员,也有一定的借鉴意义。

    1.3:接口的特点总结.pdf

    接口不能被实例化(接口是特殊抽象类,抽象类中可能有抽象方法,实例化没有意义)。 接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改。(默认为public) 接口中的成员不能有任何实现(...

    曲线接口,使用C#来绘制,用来绘制曲线demo。

    3.使用/学习目标:可以作为工业收集数据绘制成曲线的接口 4.应用场景:工业制造 5.特点:简洁美观把数据绘制出来,方便员工观察数据 6.适用人群:适用C#的制作上位机绘制曲线图形 7.使用/学习说明:在学习过程中可以...

Global site tag (gtag.js) - Google Analytics