AS3 Dynamic Singleton – Classes Dinamicas

AS3 Dynamic Singleton – Classes Dinamicas

Este pode nao ser o nome correcto, mas soa bem: AS3 Dynamic Singleton!

Como tinha falado no post anterior, uma class singleton é muito util em muitos casos, mas deixa de ser tão util quando necessitamos de a usar para guardar muitas variaveis, que teriamos que declarar cada uma na class. Mas uma das maravilhas que o as3 nos propõe é a criação de uma class que não necessita de declarar variaveis e pode comportar-se como um objecto onde adicionamos e removemos propriedades sem estas serem conhecidas pela propria class.

 

Falo dos descriptores de acesso, (falei deles no meu e-book/tutorial de action script), e de um em particular, o dynamic, que para aqueles menos familiarizados permite que a class seja alterada em runtime, ou seja, vai permitir adicionar e remover propriedades de si mesma… e se juntarmos isto a uma class singleton que derive por exemplo de um objecto, teremos uma class singleton, acessivel em toda a aplicação com a possibilidade de adicionarmos e removermos variaveis com uma simples instrução.

Um dos problemas que se pode colocar, é que numa aplicação grande com mais que um programador, ele tem que ser informado das variaveis adicionadas dinamicamente na class, visto que elas não aparecem em lado nenhum… mas vamos a um exemplo antes que as coisas começem a complicar a sua compreensão.

 

Tendo a class singleton anterior, adicionando o descriptor dynamic :

 

package com.config
{
public
dynamic class meuObjecto extends Object
{
public var variavelExemplo:String=”Ola Singleton”;

private static var instance:meuObjecto;
private static var allowInstantiation:Boolean;

public static function getInstance():meuObjecto {
if (instance == null) {
allowInstantiation = true;
instance = new meuObjecto();
allowInstantiation = false;
}
return instance;
}

public function meuObjecto():void {
if (!allowInstantiation) {
throw new Error(”Erro: Criação de instancia nao permitida: Use meuObjecto.getInstance() em vez de new.”);
}
}

}
}

 

A partir daqui a nossa class é exactamente igual, mas com a vantagem de esta ser dinamica, um pequeno promenor que nos ajuda em muito, veja o caso:

quero que a minha class tenha as variaveis data, nome, morada, telefone, fax… Da forma convencional, teria que as declarar todas na minha class singleton:

public var  data:String =””;

public var  nome:String =””;

public var  morada:String =””;

…etc…

 

Mas… com uma class dynamic apenas preciso de fazer:

import com.config.meuObjecto;

var tmp:meuObjecto = meuObjecto.getInstance();

 

e fazer a atribuição normal como se as variaveis estivessem na realidade declaradas dentro da class:

tmp.data=”02/03/09″;

tmp.nome=”AS 3″;

tmp.morada=”Tsw Blog, ip: 255 555 555 55, DNS: 655.655.655.655 “;

tmp.telefone=”65465465″;

tmp.fax=”64564565465″;

 

e poderiamos adicionar uma centena de variaveis que elas seriam guardadas e passadas a todas as instancias da class, verifiquem de seguida por exemplo:

var tmp5:meuObjecto = meuObjecto.getInstance();

 

Se fizerem trace(“->”+tmp5.morada); ele vai devolver a morada inserida na class por via do tmp.morada=”…”; ou de qualquer instancia.

 

Isto pode justificar muitas aplicações, mas uma das mais uteis que uso é o preenchimento automatica de uma class singleton dinamica com dados vindos de um ficheiro ou base de dados de configurações. No próximo post virei falar deste aspecto e exemplificar este ponto.

 

Espero que seja util.

Abraço.


Leave a Comment

Post