今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第8节的学习笔记,第8节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。

笔记

很多面向对象的语言都提供"抽象类"和"接口"这两个语法特性。抽象类和接口是实现面向对象四大特性、很多设计模式、设计思想、设计原则的基础。 但并不是所有编程语言都支持者两个语法特性,我们可以通过一些手段来模拟这它们。

这节首先是从Java语言角度介绍了Java中抽象类和接口的区别,接着介绍了这两种语法特性能解决什么编程问题:

  • 抽象类更多的是为了代码复用
  • 接口更侧重于解耦。接口是对行为的抽象,相当于一组协议或契约
  • 接口比抽象类应用的更广泛,我们经常会提"基于接口编程而非实现编程"

对于一些不支持"抽象类"和"接口"这两个语法特性的语言,如动态编程语言,可使用使用duck-typing来实现对接口的支持。

实际工作如何关于抽象类和接口如何选择呢?

  • 抽象类,是继承,我们要实现一种is-a的关系,并且是为了解决代码复用的问题
  • 接口, 是要实现一种like-a的关系,并且是为了解决抽象而非代码复用的关系

另外还要知道,对于组合是一种has-a的关系。

参考