Páginas

sexta-feira, 17 de agosto de 2012

Fabrica de objetos em Java–reflection

 

package fabricadeobjetos;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author Marcelo Gomes de Paula
* @email marcelogomesrp@gmail.com
* @version 0.1
*/
public class FabricaObjetos {
    private String classeName = "fileutils.Contato";
    private Object objeto = null;
    private Class classe;

   
   
   

   
   
    public FabricaObjetos(String classeName) {
        this.classeName = classeName;
        try {
            //objeto = new Contato();
            classe = Class.forName(classeName);
            objeto = classe.newInstance();
        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
   
    public void addStringValue(String nomeMetodo, String valor){
        try {
            Method method = classe.getMethod(nomeMetodo, String.class );
            Object arglist[] = new Object[1];
            arglist[0] = valor;
            //Object retobj = method.invoke(objeto, arglist);
            method.invoke(objeto, arglist);
           
        } catch (IllegalAccessException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchMethodException | SecurityException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        }   
    }
   
   
        public void addIntegerValue(String nomeMetodo, Integer valor){
        try {
            Method method = classe.getMethod(nomeMetodo, Integer.class );
            Object arglist[] = new Object[1];
            arglist[0] = valor;
            //Object retobj = method.invoke(objeto, arglist);
            method.invoke(objeto, arglist);
           
        } catch (IllegalAccessException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchMethodException | SecurityException ex) {
            Logger.getLogger(FabricaObjetos.class.getName()).log(Level.SEVERE, null, ex);
        }   
    }
   

   
    public Object getObjeto() {
        return objeto;
    }
   
   
   
   
   
}

 

 

Consumindo

package consumidordafabrica;

import consumidordafabrica.teste.Outra;
import consumidordafabrica.teste.Pessoa;
import fabricadeobjetos.FabricaObjetos;
import java.util.ArrayList;
import java.util.List;

/**
*
* @author marcelo
*/
public class ConsumidorDaFabrica {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        String arquivo = "marcelo,1;gomes,2;paula,3";
       
       
        List<Pessoa> pessoas = new ArrayList();
       
        for(String linha:arquivo.split(";")){
            System.out.println("Linha " + linha);
            String valores[] = linha.split(",");
           
            FabricaObjetos fb = new FabricaObjetos("consumidordafabrica.teste.Pessoa");
            fb.addStringValue("setNome", valores[0]);
            fb.addIntegerValue("setIdade", Integer.valueOf(valores[1]));
            pessoas.add( (Pessoa) fb.getObjeto());
        }
       
        for(Pessoa pessoa:pessoas){
            System.out.println("Pessoa: " + pessoa.toString());
        }
       
       
       
        FabricaObjetos texto = new FabricaObjetos("consumidordafabrica.teste.Outra");
        texto.addStringValue("setTexto", "Opa esta indo");
        Outra outra = (Outra) texto.getObjeto();
       
        System.out.println("Outra: " + outra.toString());
       
       
       
    }
}

 

 


Fonte

Nenhum comentário:

Postar um comentário