Used in a .net project. The project reuiqred an object to send email whenever certain data changed. The object was as such totally independent of the emailing functionality. So, an interface was created to simply allow the object to know what type of functionality would be offerred by the email manager (it's important for the object to know that how the functionality would be implemented), so the constructor of the object was modified to accept an argument of email manager interface. The email manager was passed dynamically by a method that created the object.