Caros colegas,
Sempre que possível gosto de utilizar algum design partner em meus códigos.
Tenho um em particular que fico em dúvida sobre a real necessidade e sobre qual usar.
Os requisitos são os seguintes:
- Recebo em um método parâmetros provenientes de servlet, que chega como string (obviamente).
- Essa string possui 2 parâmetros que devo decompor (através de splits).
- O primeiro parâmetro a ser decomposto dessa string é uma ação, como por exemplo: incluir_ids ou excluir_ids.
- O segundo parâmetro seriam quais id´s seriam incluidas ou excluídas.
De cara pensei no padrão factory para as ações de incluir e excluir.
Mas ai entra também uma dúvida sobre a implementação desse padrão: A classe AcaoFactory seria a responsável por decompor e validar os parâmetros da string, e após isso atribuir para a classe correta ?
O que acham ?
Opinem por favor.[google]
Obs.: Vou tentar depois colar as classes aqui para vocês opinarem.
Obrigado.
public class AcaoRun {
/**
* @param args
*/
public static void main(String[] args) {
//Esse seria o parâmetro obtido da servlet
String parametroDaSerlvet = "incluir_id={0001,0002,0003,0004}";
Acao acao = AcaoFactory.getAcao( parametroDaSerlvet );
if ( acao == null ){
System.out.println("Acao nula");
return;
}
acao.processarID();
}
}
public class AcaoFactory {
final static String ACAO_INCLUIR = "incluir_id";
final static String ACAO_EXCLUIR = "excluir_id";
private static String[] listaDeID;
public static Acao getAcao(String param){
// Caso fosse java 7 poderia utilizar Switch !!!
if ( param.contains( ACAO_INCLUIR ) && validarIDs(param) ){
return new Inclusao(listaDeID);
}else if ( param.contains( ACAO_EXCLUIR ) && validarIDs(param) ){
return new Exclusao(listaDeID);
}
return null;
}
public static boolean validarIDs( String parametro ){
if ( parametro.contains("={") && parametro.contains("}") ){
try {
// Removendo caraceteres não utilizados
parametro = parametro.replace(ACAO_INCLUIR, "");
parametro = parametro.replace(ACAO_EXCLUIR, "");
parametro = parametro.replace("={", "");
parametro = parametro.replace("}", "");
listaDeID = parametro.split(",");
return true;
} catch (Exception e) {
// TODO: handle exception
return false;
}
}
return false;
}
}
public class Exclusao extends Acao {
public Exclusao(String[] listaDeID) {
this.setListaDeid(listaDeID);
}
@Override
public void processarID() {
// Realiza as eclusões dos ids ...... Exemplifico com esse for alguma coisa
for (int i = 0; i < this.getListaDeid().length; i++) {
System.out.println("Lista Exclusao " + getID(i) );
}
}
}
public class Inclusao extends Acao{
public Inclusao(String[] listaDeID) {
this.setListaDeid(listaDeID);
}
@Override
public void processarID() {
// Realiza as inclusões dos ids ...... Exemplifico com esse for alguma coisa
for (int i = 0; i < this.getListaDeid().length; i++) {
System.out.println("Lista Inclusao " + getID(i) );
}
}
}
public abstract class Acao {
/** Array onde os IDS que serão incluídos ou excluídos ficarão armazenados */
private String[] listaDeid;
public void processarID(){}
public void setListaDeid(String[] listaDeID2) {
this.listaDeid = listaDeID2;
}
public String[] getListaDeid() {
return listaDeid;
}
/*
* Obtém um id da lista
*/
public String getID( int id ){
return this.listaDeid[id];
}
}
(está em ingles)