OOP接口的理解

概括

最终目标:以不变应万变。
类与类之间用接口引用,而不是直接调用,接口派生类再怎么变化只要接口不改程序就不会出现问题。
把多个类似的类的相同/主要操作提取出一个接口并实现,然后这些类抽取出相同因素构成父类,令接口使用泛型限制为父类的类型,既满足了多各类的相同方法实现,也满足相同方法中的不同类型的参数。

主要逻辑原则,基本业务可以抽象成任务接口,业务类继承它,在控制器层调用任务并实例化相应的业务类,可以直接简单的操作,即使以后业务内容变动,控制器层仍然不需要修改。

不同的层展示不同的方法,通过接口就可以区分层次,高层的类(控制器)无需知道低层类(业务)的其他方法,只要使用业务.执行()的方法,同样业务类也无需知道sql查询过程,只管提交数据给dao对象查询结果,如果通用dao接口能满足使用,就无需再向下转型。
控制器 -(任务接口)- 业务 -(dao接口)- 数据访问实现类

接口是完全公开,公有的,目的就是让所有人都可以使用,但使用的人并不需要关心它内部是如何实现的,只需要使用接口固定的几个关键方法,只需知道怎么使用,不关心原理,这就是接口的意义。

例如一个USB接口,带有USB接口的设备成千上万,但都通过这一个接口连接电脑,对于电脑(调用方)来说,并不关心这个设备(被调用方)是怎么实现它的功能的,我只关心怎么和它通信,这就要通过接口来实现,如USB接口中定义了两个方法,send(),get() send方法用来向USB设备发送数据,而get方法用来接收数据,比如这是个u盘设备并实现了USB接口,那么电脑只需要调用uDisk.send(File)方法传入某文件/数据,这样就可以把文件写入u盘中,而电脑根本不用知道u盘内部是如何存储文件,如何管理文件的,又比如这个USB设备是一个鼠标,我们马上会想到使用Info i = mouse.get()通过get获取鼠标发回来的信息,并进行解析,看到这里,不难发现,不管是何种USB设备,它和电脑之间永远只有两种方法,就是发送和接收,这就是将两个对象间的调用关系简化到极致的产物,它已经不能再简单了,我们只要把这些关键方法写作一个接口,而它们之间交互的数据类型则成为USB接口的泛型,发送和接收方法的参数/返回值类型就可以是泛型的,这样就能使得他们之间的联系变得有条不紊。

这些设备知道自己该做什么,但都遵循这个USB接口规则*