So, just for those who are unfamiliar, in object design an interface is a contract that an object is required to fulfill. If an object declares that it implements an interface, then it is required to implement all of the methods defined in that interface. This essentially allows developers to separate between the definition (i.e. interface) of an object and its implementation. In layman's terms, separating the what from the how.
For instance with Cloudify, at the core of the product we have the cloud driver, which defines how Cloudify allocates resources from the cloud of choice. Obviously, each cloud has its own API, so there are multiple cloud driver interface implementations. There is one based on JClouds, the multi-cloud library, one for Microsoft Azure, in addition to several other implementations. On top of these, users are also able to create their own cloud driver implementations, using Java or Groovy..