It seems that interfaces are mainly useful in a design pattern that adopts the Decorator principle (i.e. inheriting objects much the same way abstract classes work) - is this true? if not what other advantages or uses has an interface in allowing you to write more efficient and elegant code?