domingo, 14 de junho de 2009

Padrões de Projeto: Observer + Aspectos

Apresentamos o Padrão de Projeto Observer em 2 versões. Implementando todas as classes do padrão ou implementando com o uso das classes da API. Nos dois casos existem problemas para o reuso do código.
Para implementar o Padrão de Projeto podemos definir uma interface ou uma classe abstrata para o Subject. A classe concreta nos 2 casos vai ter "código extra" que não faz parte do negócio. Com o uso da interface Subject a classe Concreta deve implementar os métodos do padrão de projeto. Se utilizar a classe abstrata Suject a classe Concreta deve estender dessa classe impedindo que se faça reuso da classe por meio de herança (Java não permite herança múltipla).



/**
* Estendendo de uma classe abstrata Subject.
* Em vermelho código adicionado em virtude do padrão.
*
*/
public class ConcreteSubject extends Subject {

private int estado = 0;

public int getEstado() {
return estado;
}

public void setEstado(int estado) {
this.estado = estado;
this.notifyObservers(estado);
}

}


Isso levanta uma discussão quanto ao uso desse padrão e a possibilidade de reuso das classes. Uma outra forma de implementar o padrão é utilizando aspectos, dessa maneira a classe a ser observada não ficaria com nenhum código estranho.



/**
* Utilizando Aspectos.
* O padrão é implementado sem interferir diretamente na classe ConcreteSubject.
*/
public class ConcreteSubject {
private int estado = 0;

public int getEstado() {
return estado;
}

public void setEstado(int estado) {
this.estado = estado;
}
}


Faça o download da versão utilizando Aspectos: PadraoObserverImpl_3.zip

No post anterior temos download de 2 formas de implementação do padrão e um exemplo de aplicação do padrão.

Nenhum comentário:

Postar um comentário