The composite design pattern uses an interface to treat a collection of objects as a single object. You can spot a composite class because it implements an interface and possesses a collection of that same interface.
class MyComposite implements MyInterface
{
private MyInterface[] my_interfaces = []
public addMyInterface(MyInterface my_interface)
{
this.my_interfaces.add(MyInterface my_interface)
}
public doWork()
{
foreach(this.my_interfaces as my_interface)
{
my_interface.doWork()
}
}
}
MyComposite has a collection of MyInterface
and calling doWork() iterates that collection and calls
doWork() on each collection item.
Anywhere the interface is referenced, the composite can be used, so a single interface implementation can be replaced with a collection of implementations without modifying any calling code.
Behold the power of interfaces!