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.

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top