conceito
O padrão do decorador atribui dinamicamente a responsabilidade ao objeto. Para estender a funcionalidade, o decorador fornece uma alternativa mais flexível do que a herança.
O decorador e o objeto decorado têm o mesmo supertipo.
Você pode embrulhar um objeto com um ou mais decoradores.
Como o decorador e o objeto decorado têm o mesmo supertipo, em qualquer ocasião em que o objeto original (escrito) seja necessário, o objeto decorado pode ser substituído por ele.
O decorador pode adicionar seu próprio comportamento antes e/ou depois das ações do decorador que está sendo encomendado para alcançar um objetivo específico.
Os objetos podem ser decorados a qualquer momento, para que os objetos possam ser decorados dinamicamente e ilimitados com seu decorador favorito durante o tempo de execução.
Em Java, muitas classes do pacote de IO são a personificação dos padrões típicos de decoradores, como:
A classe decorativa implementa a mesma interface que a classe decorada.
A classe decorada não se importa com qual classe de implementação é usada para decorá -la.
O mesmo método de negócios é chamado pela classe decorativa para aprimorar as funções da classe decorativa.
Exemplo:
Diagrama de classe
interface pública IRADER {void read (); } classe pública leitor implementa o IRADER {@Override public void Read () {System.out.println ("Leia do leitor"); }} classe pública BufferErader implementa o IRADER {private irader mreader; public buffarredreader (leitor de irader) {this.mreader = leitor; } @Override public void read () {System.out.println ("Leia do BufferReader"); mreader.read (); }} public class Test {public static void main (string [] args) {leitor leitor = new Reader (); leitor.read (); System.out.println ("-----------"); BufferReader buffaredReader = new BufferredReader (leitor); BufferredReader.read (); }} Características:
1. Objetos decorativos e objetos reais têm a mesma interface. Dessa forma, o objeto cliente pode interagir com o objeto decorativo da mesma maneira que o objeto real.
2. O objeto decorativo contém uma referência a um objeto real
3. O objeto decorativo aceita todas as solicitações do cliente. Ele encaminha essas solicitações para o objeto real.
4. Objetos decorados podem adicionar alguns recursos adicionais antes ou depois de encaminhar essas solicitações. Isso garante que, em tempo de execução, funções adicionais possam ser adicionadas externamente sem modificar a estrutura de um determinado objeto.
No design orientado a objetos, as extensões funcionais de uma determinada classe são geralmente alcançadas por meio de herança. Após a decoração, o objeto real é mantido para melhorar sua função.
Diferença entre decorador e modo adaptador:
Sobre novas responsabilidades: os adaptadores também podem adicionar novas responsabilidades ao converter, mas o objetivo principal não é. O modelo decorador adiciona principalmente novas responsabilidades ao decorador.
Sobre o objeto que envolve: o adaptador conhece os detalhes do adaptador (ou seja, a classe adaptadora). O decorador sabe apenas qual é a sua interface.
Quanto ao seu tipo específico (seja uma classe base ou outra classe derivada), ele é conhecido apenas durante o tempo de execução.