As definições não são informais, são bem formais e são, sim, unânimes. São definidas em livro ou material de referência. No caso do Singleton, esse livro é o Design Patterns, Elements of Reusable Object Oriented Software. Não existe isso de “minha definição” ou “minha opinião” aqui. O objetivo primordial dos design patterns é criar um catálogo de soluções conhecidas e homologadas. Se você muda o pattern, não é mais o pattern.
O pattern também não se refere a implementação, mas a funcionalidade. É um pattern de “design”. Você não precisa de um método getInstance para ter um singleton. O objetivo do pattern é criar uma instância única. E por única, ele quer dizer única mesmo.
A anotação @Singleton tenta emular essa funcionalidade. E precisa de um complexo mecanismo para garantir isso num servidor EJB.
O que eu critiquei é justamente sua frase, por ser simplista. Você disse somente:
Você falou assim, seco, sem dar qualquer detalhes da implicação disso, sem dizer que o Singleton era para outras coisas. Da forma que você colocou, soou que essa era uma decisão óbvia de design e, não só isso, uma excelente decisão.
Você também não disse que o Singleton é uma possível opção, mas sim, a “melhor opção” para “elementos globais”. O que há para não entender aqui? E o que tem de genérico na frase? Você simplesmente afirmou, com todas as letras e categoricamente, que esse é o “melhor pattern para elementos globais”. Por isso veio a minha crítica logo em seguida, pois num fórum de Java Básico, uma afirmação simplista como essa pode estimular o uso do padrão, onde ele não deveria ser estimulado.
Minha sugestão é fazer o que já foi dito pelo rmendes08. Rever a necessidade de globais. Na maior parte dos casos, elas sequer precisam ser globais, podem ser acessadas de um contexto local. Em muitos casos, basta ter um registry num local mais acessível, e você passa a obter os mesmos benefícios do Singleton sem os seus malefícios.
Não estou criticando a existência do pattern, só o fato de sua frase ter dado a entender que ele é o melhor local para se colocar elementos globais. O fato de ser global deveria ter pouco a ver com sua decisão de usar um singleton. A razão pela qual você deveria querer um singleton é o fato dele ser único. É muito mais difícil dar essa última garantia.
PS: Na verdade, se você olhar meu primeiro post, vai ver que nem sequer citei sua frase especificamente, só coloquei a ressalva de que não era o propósito do pattern ser um repositório de variáveis globais.