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