Decorator

Descrição:

A intenção do padrão de projeto Decorator é dinamicamente, agregar responsabilidades adicionais a um objeto. Os Decorators fornecem uma alternativa flexível ao uso de subclasses para extensão de funcionalidades.

Descrição da Diagrama de Classes genérico do padrão de projeto Decorator.

  • Component
  • ConcreteComponent
  • Decorator
  • ConcreteDecorator
  • Diagrama de Classes genérico do padrão:

    Exemplo:

    Beverage é uma classe abstrata com os dois métodos getDescription() e cost(). getDescription() já está implementado, mas é necessário implementar cost() nas subclasses.

    Para implementar a classe abstrata Condiments (Decorator) é necessário intercambiar com a classe Beverage, por isso é estendido a classe Beverage.

    Para implementar algumas bebidas é preciso definir uma descrição para a bebida especifica e também implentar o método cost().

  • Por exemplo, a classe Espresso:
  • As outras classes HouseBlend, DarkRoast e Decaf podem ser implementadas exatamendo nesse padrão.

    No diagrama de classe é possível ver o componente abstrato (Beverage), os componentes concretos (HouseBlend, DarkRoast, Decaf, Espresso) e o decorator abstrato (CondimentDecorator).

  • Como exemplificação de implementação para os decoradores concretos, eis o Mocha:

    Diagrama de Classes do exemplo:

    Ver código fonte no Github