Decorator

Introdução

Inclusão transparente

editor7-5.gif (6697 bytes)

A classe MonoElementoDeDocumento

editor8.gif (7522 bytes)

public abstract class MonoElementoDeDocumento extends ElementoDeDocumento {
    private ElementoDeDocumentoIF componente;
    public void draw() {
        componente.draw();
    }
}
public class Borda extends MonoElementoDeDocumento {
    ...
    public void draw() {
        super.draw();
        drawBorda();
    }
    ...
}

editor9.gif (14766 bytes)

O padrão Decorator

Objetivo

Também chamado de

Quando usar o padrão Decorator?

Estrutura genérica

decorator1.gif (11018 bytes)

Participantes

Colaborações entre objetos

Conseqüências do uso do padrão Decorator

Considerações de implementação

Decorator versus Strategy

decorator2.gif (4691 bytes)

Exemplo de código na API Java

import java.awt.*;
import java.applet.*;

public class Scroll extends Applet {
    public void init() {
        ScrollPane spane = new ScrollPane();
        Button botaoGrande1 =
            new Button("Eu adoro Metodos Avançados de Programação!");
        botaoGrande1.setFont(new Font("Serif", Font.ITALIC, 80));
        Button botaoGrande2 =
            new Button("Eu adoro Metodos Avançados de Programação!");
        botaoGrande2.setFont(new Font("Serif", Font.ITALIC, 80));
        spane.add(botaoGrande1);
        add(botaoGrande2);    // sem scroll bars
        add(spane);           // com scroll bars
    }
}

Referências adicionais

// exemplo 1
TableFilterDecorator filterDecorator =
      new TableHighPriceFilter(new TableSortDecorator(table.getModel()));

// exemplo 2
TableSortDecorator sortDecorator =
      new TableSortDecorator (new TableHighPriceFilter (table.getModel()));

Pergunta final para discussão

programa