The decorator design pattern uses an interface to add functionality to a class without extending it. Another name for ‘adding functionality’ is ‘decorating’. You can spot a decorator because it implements an interface and accepts the same interface in its constructor.
class MyDecorator implements MyInterface
{
    private MyInterface my_interface
    public construct(MyInterface my_interface)
    {
        this.my_interface = my_interface
    }
    public doWork()
    {
        this.my_interface.doWork()
        this.doAdditionalWork()
    }
}
MyDecorator decorates any MyInterface implementation with this.doAdditionalWork(), while also doing the original work with this.my_interface.doWork().
Anywhere the interface is referenced, the decorator can be used, so additional work can be added without class extension and without modifying any calling code.
Behold the power of interfaces!