Uma classe\instância ser acessível em qualquer lugar da minha aplicação

Tenho uma classe chamada SecurityEngine, ainda sendo desenvolvidas
várias classes precisam acessar métodos dela para carregar os roles e rules da aplicação. essa classe ira concentrar os dados sobre autenticação e autorização

O fato é que vários mecanismos de controle de acesso a recursos restritos (ex: un filter que impede pessoas não autenticadas acessarem a pasta /admin/*) irão precisar acessar os recursos dessa classe (ex. chamando métodos como por exemplo: getRole, getRule, etc)

eu pensei em deixar todos os métodos como estáticos
mas eu vejo que isso não é muito usado, parece meio feio, inflexível…

o que vocês fariam?

Injecao de dependencias - faca com que todas as classes que precisam dessa SecurityEngine recebam uma instancia dela (seja pelo construtor ou atraves de setters). Voce tambem pode usar um singleton, mas nao eh uma boa ideia, apesar do codigo ficar mais simples (e simplorio).

E da rpa fazer isso facilmente com factories, se voce nao esta usando um container IoC nem tem interesse.

certo
e esta factory que o Philip ta falando, seria uma especie de factoy que guardaria apenas uma instância (uma especie de singleton)?

pq a instância do SecurityEngine tem que ser pré-configurada

CV,

Por que singleton nao seria uma boa ideia?

Valeu!

Pq singletons nunca sao uma boa ideia a nao ser em casos muito especificos (eu consigo entender que se use singleton numa classe que representa um dispositivo de hardware, como uma impressora, por exemplo). Tente fazer um teste unitario de um singleton, e vc vai entender mais ou menos o ponto. Voce esta, basicamente, bolando uma classe global, com estado global, o que quase nunca eh uma boa pedida.

[Singleton] Porque usar Singleton comov ariavel global eh besteira:
1 - Você está deturpando o pattern
2 - Você está usando variáveis globais, o que quase sempre eh ruim

[microfilo]
Não. A Factory préconfigura a isntância, ams não necessariamente ela é um singleton. Se o objeto for stateless, você pode até usar um só para todos os clientes, mas cuidado.