Notificar instância de objeto
Olá pessoal.
Estou com a seguinte situação e me deparei com um problema:
TClasseA = class //Classe base de diversas outras
end;
TClasseB = class(TClasseA)
end;
TClasseC = class(TClasseA)
end;
TClasseX = class
end;
Minha classe X precisa ser notificada toda vez que uma nova instância da classe A, seja ela mesma ou suas classes filhas, for feita. Como posso fazer isso?
Estou com a seguinte situação e me deparei com um problema:
TClasseA = class //Classe base de diversas outras
end;
TClasseB = class(TClasseA)
end;
TClasseC = class(TClasseA)
end;
TClasseX = class
end;
Minha classe X precisa ser notificada toda vez que uma nova instância da classe A, seja ela mesma ou suas classes filhas, for feita. Como posso fazer isso?
Lucas Silva
Curtidas 0
Respostas
Claudio Ferreira
26/11/2014
Há algumas formas de fazer isso, mas a mais bacana é usando o padrão de projeto Observer que provê baixo acoplamento entre as classes. dê uma olhada :
https://www.devmedia.com.br/padrao-observer/2065
https://www.devmedia.com.br/padrao-observer/2065
GOSTEI 0
Lucas Silva
26/11/2014
Pensei no padrão Observer, mas não sei se é possível encaixá-lo na minha situação. Eu vou precisar fazer a notificação no constructor da classe (ou outro lugar que identifique que uma classe foi instanciada), mas dentro dele eu ainda não terei a lista de observadores. Existe a possibilidade de implementá-lo usando métodos estáticos? Se implementá-lo com métodos estáticos, o padrão continua correto?
GOSTEI 0
Claudio Ferreira
26/11/2014
Nunca tentei. Mas o interessante é resolver o problema sem problemas no que diz respeito ao alto acoplamento, o Padrão observer prima por isso. Se usar com método estáticos e resolver não ficando muito acoplado causando problemas na manutenção, bota pra frente e faz. O padrão estar correto não importa muito, o que importa é resolver dando uma boa implementação considerando o acoplamento. Já cansei de usar alguns padrões mas tive que alterar algumas coisas para que pudesse atender alguma situação, isso é normal.
GOSTEI 0