terça-feira, 24 de fevereiro de 2009

Effective java 2

Continuando a minha saga através do livro Effective Java de Joshua Block, vou agora comentar item 2 do Livro (Executando o singleton através de construtores privados).

Singleton é um padrão de projeto que estabelece que uma classe só poderá ter um único objeto instanciado, esse é um padrão relativamente comum, por isso, há muita polêmica em torno dele, muito acreditam que o uso do singleton descaracteriza a orientação a objeto. Eu acho que não é bem assim, o que aconteceu com o singleton foi um mal muito comum em computação, ele virou moda, e por ter se tornado moda, muita gente abusou do seu uso, isso é uma coisa legal do Effective Java, o singleton é bastante abordado, com isso podemos fazer o uso correto desse padrão de projeto.

Basicamente temos duas alternativas para o uso de construtores privados. A primeira consistiria em deixar um instância da classe definida como estática, publica e final, mantendo o construtor privado. A segunda consistiria em manter uma instância estática e privada, fornecendo um método estático e publico para o acesso a instância, evidentemente, assim como na primeira alternativa devemos deixar o construtor como privado.

A principal vantagem da primeira alternativa é clareza na implementação do singleton, pois é um pouco óbvio que uma classe que não tenha construtores e uma instância da própria classe como pública, estática e final, pois o fato desse objeto da classe ser final, de certa forma denúncia um singleton.

A principal vantagem da segunda alternativa é possibilidade de ser fazer novas coisas através do método estático e publico se obter a instância. Por exemplo, poderia se escolher um construtor diferente ou controlar o número de instâncias como em um pool de objetos.

Um aspecto que pode causar desconforto no uso do singleton é na serialização de objetos, a simples implementação da interface Serializable pode não ser suficiente, entretanto, vou deixar para tratar os pormenores desse assunto mais adiante.

Nenhum comentário: