0%

基于抽象编程

接口的定义

基于接口编程, 更具体点就是基于抽象编程.

抽象是需要暴露给客户端使用一组行为, 可以是一个类所具有的行为, 一个包所提供的 api, 一个服务所提供的功能等等; 而不仅仅是 Java 语言中的抽象类和 interface 这两种语言特性.

案例实战

针对一个图片上传和下载的实战案例, 让我更加理解了封装和抽象是软件设计中的一体两面.

封装

工作中也做过多媒体文件上传和下载的实践, 也是基于 Java 的 interface 进行编程, 但是并没有达到解耦的目的.

通过今天的案例, 恍然大悟, 原来是我在软件设计过程中并没有封装的概念.

抽象的接口, 是用来暴露给客户端使用的行为, 而暴露的同时, 也该隐藏和具体实现有关的所有信息, 这就是封装了. 没有了封装的抽象, 也失去了其抽象的意义.

抽象

一个给接口命名的小技巧, 不要暴露实现信息, 下载就是 download(), 而不是 downloadFromXXYun().

接口

接口提供统一的行为列表.

使用接口, 并结合多态的语言机制, 可以有效的实现代码的解耦, 从而提高代码的扩展性, 可维护性.

解耦客户端实现的方法

  1. 使用配置文件 + 反射 + 工厂模式
  2. 使用依赖注入
  3. 给对象创建一个 Context 对象, 类似工厂模式

打卡

打卡10:

今天学习: 设计模式09课, 基于接口编程

收获:

  1. 加深理解基于接口编程的含义, 基于抽象编程, 可以是一个类的行为, 一个包的行为, 一个 API 的功能等;
  2. 软件设计和开发过程中要有抽象(方法名只说明行为), 封装(隐藏所有具体实现) 和接口(提供公有行为)意识, 要将三者结合起来考虑问题, 扫除了思维盲点, 过去开发中都只是关注于基于 Java 中的 interface 编程, 并没有抽象和封装的意识, 自然也没有得到基于接口编程的好处.
  3. 基于接口编程的实质就是封装变化的部分, 暴露公有的抽象行为, 与多态的语法特性结合, 实现代码的解耦, 可扩展.