(Resolvido)Dúvida com o padrão Observer

Olá pessoal, li o seguinte tópico aqui no guj a respeito do Pattern Observable
http://www.guj.com.br/java.tutorial.artigo.47.1.guj

Porém não estou conseguindo aplicar na solução que preciso, gostaria de saber se alguém poderia me ajudar.

A minha situação é a seguinte, tenho dentro de um JInterFrame um JTabbedPane e 3 botões - Incluir, Excluir e Sair.
Cada aba do JTabbedPane é uma classe herdando de JPanel com o formulário e os demais dados necessários. Cada um em uma classe diferente.

O que eu precisava é que de acordo com uma determinada situação dos dados desses JPanels, eu conseguisse alterar o estado destes botões do JInternalFrame. Como cada Aba herda de JPanel , não consigo herdar a classe Observable.

Como eu poderia fazer isto? Alguém poderia me ajudar?
Obrigado!

Esse é o problema da implementação do pardão Observer presente no Java. Não sei se tem uma solução melhor, mas já passei por isso e acabei implementando o padrão na mão mesmo, fazendo Observer ser uma interface.

Para se basear em uma implementação, você pode consultar o capítulo que fala sobre o padrão no livro Head First Design Patterns.

Será que o pattern STATE não se encaixa melhor neste seu caso?

flws

O que eu preciso fazer é verificar se devo habilitar ou desabilitar esses botões, de acordo com as regras de negócios…
Vc poderia me dar um exemplo com State?
Obrigado!!

Resolvi, segui o conselho do tnaires, criei duas interfaces

public interface Subject { /**Adiciona uma classe que devem ser notificadas.*/ public void addObserver(Observer o); /**Remove uma determinada classe da lista de classes que devem ser notificadas.*/ public void removeObserver(Observer o); /**Notifica as classes observadoras de um determinado evento.*/ public void notifyObservers(); }

public interface Observer {
	/**
	 * Recebe a notificação da classe que está sendo observada
	 * @param Observer - classe que está sendo observada.
	 * @param Object - notificação enviada da classe observada.	 
	 * */
     public void update(Observer o, Object arg ); 	
}

A classe que deve receber a notificação(Observadora) eu implementei a interface Observer , a classe que deve enviar a notificação(Observada) eu implementei a interface Subject.

De dentro da classe que deve Observadora eu adiciono a mesma na classe Observdora(JPanelItemMonitoramento).

getJPanelItemMonitoramento().addObserver(this);

Na classe observada eu utilizo o método notifyObservers() para mandar o que preciso para a classe observadora.

public void notifyObservers() {
    Iterator i = observers.iterator();
    while( i.hasNext() ) {
         Observer o = (Observer) i.next();
         /*O update está implementado na classe observadora*/
          o.update(o, false);
    }
}