Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boas,
A grande maioria de minhas classes derivam de uma classe base chamada Object, assim tenho um mínimo de tipagem inter-objetos.
Então eu decidi/precisei implementar o Padrão Observer. Inicialmente eu o tive implementado em classes separadas e funcionava perfeitamente, mas chegava a ser ridículo ter uma classe só para Subject e outra só para ser Observer.
Então eu decidi fazer com que todos os meus objetos que derivassem de Object serem, também, Subjects.
Até aí, tudo bem. Como a partir de agora um Object é um Subject, estendi a classe.
Porém eu queria mais. Quis fazer com cada Object pudesse atualizar a si mesmo e, então, decidi implementar nele a interface Observer de método único, a saber, Observer::update().
Foi então que começaram os conflitos de assinaturas.
Por exemplo: No meu Table Manager, tenho como parte do CRUD básico, o método *Manager::update()* que, dada a relativa simplicidade não possui argumentos.
Mas como essa classe também estende **Object** (e isso é vital nesse exemplo) devo implementar *Observer::update()* que contém como argumento o **Subject** atualizado e, assim, as assinaturas conflitam.
Claro, eu poderia muito bem alterar a interface para que o assunto pudesse ser opcional e simplesmente equalizar as assinaturas, mas isso é gambiarra das grossas.
Alguma opinião?
Carregando comentários...