面向接口编程以及MVP的实现原理
接口的妙用
类与类连接的桥梁
接口是一种实现类与类之间通信的桥梁,其中接口引用调用类实现传送数据的作用而对应的接口具体示例化的类则对应的是具体数据的操作(Android中将请求的数据显示出来)。而所谓的面向接口编程指的是我们完全可以统筹两端带着我们脑子中的业务需求通过定义抽象方法。需要具体考虑的是一方面我们要明确View层需要的是什么即我们要操作的数据对象是什么,定下这一点那么也就定下了抽象方法的参数(抽象方法参数的决定方向在View层);另一方面则是实际数据的传参也就是关注的点在数据层,而这里所谓的数据层便往往是引用的使用者。
明确两个类之间交互的两种方式
两个类如果都是接口的具体实现,那么交互方式无疑有两种:1.甲方以==多态==的方式去实例化乙方。2.乙方以多态的方式向甲方传输数据。
sequenceDiagram
甲->>乙:甲传数据到乙
乙->>甲:乙传数据到甲
抽象方法参数设置的技巧
- 无参抽象方法
无参抽象方法因为没有设置参数故拿到引用的一方不能传递数据到相应的实现类中,故在该方法内部只是完成方法实现类中内部字段的相关逻辑。
- 有参抽象方法
有参抽象方法的实现通常可以实现将数据从一方传递给另外一方,另外参数的设置除了可以设置具体的实体类之外还可以设置一个子接口(见子接口的好处),通过这种方式实现了在接口方法的具体实现方向接口引用的持有方传递数据(主要就是在接口的引用持有方传递的数据变成了一个包含带参抽象方法的接口)
子接口的好处
将子接口作为抽象方法的参数无非是将数据的使用方交给了持有该接口实现类引用的一方(也就是引用持有方),一句话子接口就是将实现数据传输的含参抽象方法定义在了子接口中并将子接口作为父接口抽象方法参数的一种模式(但是数据的传送方向是没有改变的)。
如何封装相关的数据
实现业务逻辑的最大化封装除了自定义注解之外就只剩下了一种方式那就是设置方法并传参数(黑箱子原理),即将相关的业务处理的代码封装到一个方法当中而外界只需要传入一个参数即可。(典型例子:将子接口的示例化放在了Presenter内部的一个含参静态方法当中)
面向接口编程的应用
MVP概述:1.Model层如果想和Presenter层进行数据交互的话有两种方式:其一Model层拿到Presenter层的引用通过定义的含参抽象方法将相关的数据传递给Presenter层。其二则是在Presenter层拿到Model层的应用(子接口的实现原理)。2.接口与静态方法的结合开发在定义接口的抽象方法的过程中将相关的业务逻辑体现出来。
拓展思考
以多态的方式对一个实现了父接口的类初始化,这时候对应的引用除了可以调已经被实现的接口中的抽象方法之外是不是可以直接调用该具体实现类中的属性方法。
无论是那种方式Model层和Presenter层之间数据的传输方向是不变的那就是Model层始终都是往Presenter层传输数据的。