Interface-based programming
Interface-based programming, also known as interface-based architecture, is an architectural pattern for implementing modular programming at the component level in an object-oriented programming language which does not have a module system. An example of such a language is Java prior to Java 9, which lacked the Java Platform Module System, a module system at the level of components introduced with Java 9.
Source: Wikipedia — Interface-based programming (CC BY-SA 4.0)