Bom primeiramente creio que discussões sobre padrões são pertinentes a esse fórum, creio que estou no lugar certo.
Mas se não estiver me falem.
Bom li aqui no fórum mesmo e no google sobre Singleton e me surgiram algumas dúvidas.
A princípio me pareceu uma idéia legal.
(Singleton é utilizado quando vc precisa de apenas um instancia de um determinado objeto na aplicação e quando este objeto tem um alto custo).
Alguns exemplos que observei na internet : Classe de Log, conexao e Classes de configuração(Classe que concentram configurações).
Estava quase convencido que era algo legal.
Mas daí resolvi ler no guj.
Vi altas críticas a esse padrão , tornar as classes burras e até mesmo que static e final deveriam ser apenas utilizado
em primitivos e de preferência com final.
Outra solução que propuseram foi trocar singleton por injeção(Injetar não costuma ser sempre um objeto novo).
Ainda surgiu uma dúvida referente a factory de conexão de banco.
Se usar um sigleton para isso todas as minhas classe terão a mesma conexao.
No caso de threads todas elas teriam o mesmo objeto.
Isso ocasionaria erro de concorrência certo?
Em uma aplicação que tenho aqui o que faço é usar uma factory com metodo getConnection();
Essa factory é chamada toda vez que passo pelo filtro.(No meu caso qualquer requisição )
Nesse caso antes da aplicação rodar eu chamo a factory e capturo uma conexao, essa conexao eu penduro na sessão e meu processamento continua normalmente chegando ao FrontController()
O FrontController por sua vez recebe a requisição e determina qual a lógica a ser processada
Ao termino da aplicação eu fecho a conexão.
Nesse caso eu teria uma conexão por request.(toda requisição passa pelo front controller), certo?
Mas se eu quisesse ter uma requisição por thread?
E se eu quisesse que uma conexão fosse compartilhada por várias threads.(e enfileiradas para serem atendidas).
Se eu quisesse ter um número de conexões ou uma regra que permita que a cada 100 usuários fosse criado uma nova conexão?