Decorator
Decorator es un patrón que permite agregar nuevos comportamientos a los objetos al colocarlos dentro de otros objetos envoltorios (wrappers) especiales.
El patrón adapter cambia la interfaz de un objeto existente, mientras que el decorator mejora un objeto sin cambiar su interfaz. Además, admite la composición recursiva, que no es posible cuando se usa el adapter.
Ejemplo de uso:
ConsoleDataSource consoleDataSource = new ConsoleDataSource();
String data = consoleDataSource.readData();
consoleDataSource.writeData(data);
EncryptionDecorator encryptionDecorator = new EncryptionDecorator(consoleDataSource);
encryptionDecorator.writeData(data);