设计模式之美学习笔记08: 如何使用普通类模拟抽象类和接口
2019-11-20
今天继续打卡学习极客时间上的专栏“设计模式之美”, 本篇是专栏第8节的学习笔记,第8节是专栏中介绍"面向对象"这一设计原则和设计思想的一节。
笔记 #
很多面向对象的语言都提供"抽象类"和"接口"这两个语法特性。抽象类和接口是实现面向对象四大特性、很多设计模式、设计思想、设计原则的基础。 但并不是所有编程语言都支持者两个语法特性,我们可以通过一些手段来模拟这它们。
这节首先是从Java语言角度介绍了Java中抽象类和接口的区别,接着介绍了这两种语法特性能解决什么编程问题:
- 抽象类更多的是为了代码复用
- 接口更侧重于解耦。接口是对行为的抽象,相当于一组协议或契约
- 接口比抽象类应用的更广泛,我们经常会提"基于接口编程而非实现编程"
对于一些不支持"抽象类"和"接口"这两个语法特性的语言,如动态编程语言,可使用使用duck-typing
来实现对接口的支持。
实际工作如何关于抽象类和接口如何选择呢?
- 抽象类,是继承,我们要实现一种
is-a
的关系,并且是为了解决代码复用的问题 - 接口, 是要实现一种
like-a
的关系,并且是为了解决抽象而非代码复用的关系
另外还要知道,对于组合
是一种has-a
的关系。