Yeah!!! Pode crer!!!
Você sabe, né? Sempre tem aqueles que “dão um new” ao invés de utilizar uma “factory”. :roll:
Yeah!!! Pode crer!!!
Você sabe, né? Sempre tem aqueles que “dão um new” ao invés de utilizar uma “factory”. :roll:
Aaaaaaah bom, entao ta’
Ficam aqui entao as duas sugestoes que pipocaram no meio da discussao, entao:
Fazer construtores protected: assim, so quem esta no mesmo pacote ou herda o objeto pode construi-lo
Usar uma implementacao de AOP que suporte advices no construtor, pra puxar o objeto da factory ao inves de criar um novo. Nem sei se existe alguma (provavelmente o AspectJ suporta esse tipo de coisa, mas eu nao tenho certeza), e talvez nao compense o esforco…
Sobre AOP, de uma procurada aqui no GUJ, eu ja postei um monte de coisa ja faz um tempinho… e, sobre o AspectJ, http://aspectj.org
Vou procurar sim… fiquei curioso… :?: :?: :?:
Vc pode fazer uma factory “universal” se vc restringir os contrutores dos seus objetos especiais. Muitos containers te obrigam a ter um construtor sem argumentos, o pico se nao me engano te obriga a ter so um (por subclasse, i.e., uma subclasse pode ter um construtor diferente da classe pai).
Desse jeito, eles conseguem instanciar seu construtor por reflexao:
public Constructible newInstance(Class cl) {
Object obj = loadedInstances.get(cl);
if (obj == null) {
obj = cl.getDeclaredConstructor(null).newInstance(null);
}
return (Constructible) obj;
}
Aquelao!!
Bom vc ter lembrado do Pico aqui… parece que eh um bom candidato a factory generica nesse caso… primeiro pq ja vem pronto, e segundo, pq é muito facil de usar
Para saber mais: http://picocontainer.codehaus.org
Voce pode utilizar aspect oriented programming e botar um hook antes do new.
Ou entao pode ser mais radical e mandar um runtime no contstrutor:
public class Foo
{
private boolean marcadorDeExistenciaTabajara = false;
public Foo()
{
if ( marcadorDeExistenciaTabajara )
{
throw new RuntimeException("Porrada mano!");
}
marcadorDeExistenciaTabajara = false;
}
}