Breve Java Pergunta: Instanciando uma determinada classe única de outro?
-
03-07-2019 - |
Pergunta
Meu problema é o seguinte: Eu preciso de uma maneira de assegurar que somente uma determinada classe pode instanciar outro. Eu não quero ter que fazer a outra uma classe interna aninhada ou algo estúpido assim. Como eu faço isso? Eu esqueço de improviso.
Solução
Faça o construtor privado. Criar um método de fábrica estático que leva uma instância da classe que é permitido o acesso. Ter o método de fábrica criar um objeto adequado e usar um settor no objeto que é permitido o acesso ao objeto criado para dar essa classe a cópia criada.
public class AllowedAccess
{
private SecureClass secure;
public setSecureClass( SecureClass secure )
{
this.secure = secure;
}
...
}
public class SecureClass
{
private SecureClass() {}
public static void Create( AllowedAccess allowed )
{
allowed.setSecureClass( new SecureClass() );
}
...
}
BTW, eu sou suspeito deste projeto. Parece muito altamente acoplado a mim.
Outras dicas
A classe interna private static é exatamente o que você quer. Nada muda sobre isso.
public class Creator {
private static class Created {
}
}
Caso contrário, você pode instanciação única proteção do nível do pacote.
public class Created {
Created() {
}
}
O que dá somente as classes do mesmo acesso de pacote para o construtor.
Você poderia fazer a classe que deve ser protegido de pacote instanciação privado.
Eu concordo com a resposta de tvanfosson e também com o comentário dele sobre acoplamento muito alto. Por que você não reter mais o controle de você processo de criação de classe através da adopção de um inversão do quadro de controle como Primavera ou Guice ?
IMHO criação de classes com a afirmação "novo" deve ser considerado um pouco ... obsoletos, as fábricas devem ser preferidos e os quadros IoC ainda mais.
Saudações