Interface from multiple perspectives

发布时间 2023-08-29 14:56:32作者: Mysticbinary

Interface is a broad concept, So to understand it please use multiple perspectives.
中文日:君子不器。

Generalization

  • 事件处理规范: 如API中的EventListener、ActionListener、WindowListener、MouseListener等;
  • 识别对象规范: 如API中的Comparable、Cloneable等;
  • 输入输出规范: 如编程人员自定义的Printable、FileWriter、Readable等;
  • 连接协议规范: 如Connectable等;
  • 特殊变量规范: 如枚举变量协议接口Enumable;
  • 高层次组织和控制结构规范: 如API中的Collection接口、List接口等;
  • 具有普遍意义的周边和附属功能规范: 如Recycleable、Colorable、Positionable等;

Vision One —— Program design

接口是类的一种扩展,可以以一种居高临下的视野去切入,它很适合以一个管理者(设计者)的角度看待要管理的对象,比如说对于一个招聘者(管理者)来说,他可能需要面试数百个个求职者(被管理的对象),每个求职者的过往经历又是那么的琐碎,种类繁多,想要快速找到一名合适人到合适岗位,招聘者所最关心就是这个人能干什么,基于这个原则,招聘者只需要看他的项目经历即可,而不需要去逐个去了解他的求学经历、家庭信息等。

归纳起来就是,很多场景下我们关心的不是类型,而是能力。我们来看一些生活中的例子:

  • 比如拍照,很多时候,需求者只要能拍出符合需求的照片就行,至于是用手机拍,还是用Pad拍,或者是用单反相机拍,并不重要,即关心的是对象是否有拍出照片的能力,而并不关心对象到底是什么类型,手机、Pad或单反相机都可以。

  • 比如要计算一组数字,需求者只要能计算出正确结果即可,至于是由人心算,用算盘算,用计算器算,用计算机软件算,并不重要,即关心的是对象是否有计算的能力,而并不关心对象到底是算盘还是计算器。

Vision Two —— The operation is unknown

很多场景下,代码并不知道具体的类型,这才是接口发挥威力的地方。
程序在设计时,对未来或者一些陌生的领域是未知的,这种场景下,就需要用到接口。针对接口而非具体类型进行编程,这个也是计算机程序的一种重要思维方式。

todo

Reference

《Java编程的逻辑》 作者:马俊昌