quarta-feira, 6 de maio de 2009

Método construtor - Singleton

Em AS não existe uma forma de criar um método construtor de uma classe como private para assim podermos usar o Design Pattern Singleton.

Métodos construtores só podem ser public sendo opcional a sua presença.

Se a sua classe herda de outra é uma boa prática fazer a chamada explícita ao método construtor da superclasse usando super(), mas caso você esqueça não tem problema, se o compilador não encontrar esta chamada, então ele irá colocar como primeiro comando do seu construtor.

Se você não criar um método construtor também não tem problema, pois o compilador cria um método construtor vazio colocando super() dentro.

Outra coisa interessante é que você pode usar o comando return no método construtor, desde que não retorne nenhum valor.

Mas se você precisar usar o Design Pattern Singleton você pode usar o seguinte código:

package mypackage {
public class ClassSingleton {
private static var instance:ClassSingleton;

public function ClassSingleton(enforcer:SingletonEnforcer) {
if (enforcer == null) {
throw new ReferenceError("Essa classe é Singleton. Utilize getInstance.");
}
}

public static function getInstance():ClassSingleton {
if (ClassSingleton.instance == null) {
ClassSingleton.instance = new ClassSingleton (new SingletonEnforcer());
}

return ClassSingleton.instance;
}
}
}

/** Classe utilitária para proibir o acesso ao construtor da classe Singleton. */
class SingletonEnforcer { }