Controlaller chamando Command!

Dae pessoal!! Eu criei esse controlador e li que seria melhor chamar commands ao invés de fazer esse montão de processamento dentro de cada if transformando meu controller em uma seuper classe!!!
Alguém poderia me dar um exemplo em como eu pegaria um if desse meu e transportaria para um command?
Sei que é pedir muito, mas não achei algo que me explique isso!
Valeu!!

[code]public class AdminController extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {


   if ( "listarSugestao".equals( comando ) ) {
        
        ArrayList sugestoes = null;
        
        try {
            sugestoes = SugestaoDAO.listar();
        } catch( Exception e ) {
            System.out.println( "Erro: AdminController" );
        }
        
        request.setAttribute( "sugestoes", sugestoes );
        request.setAttribute( "pages", "listaSugestao.jsp" );
        
        RequestDispatcher disptcher  = getServletContext().getRequestDispatcher( "/principalAdmin.jsp" );
        disptcher.forward( request, response );
        
    } else if ( "excluirSugestao".equals( comando ) ) {
        
        int id = Integer.parseInt(request.getParameter("id"));
        boolean status = false;
        ArrayList sugestoes = null;
        
        try {
            status = SugestaoDAO.remover(id);
            sugestoes = SugestaoDAO.listar();
        } catch( Exception e ) {
            System.out.println( "Erro: AdminController" + e.getMessage() );
        }
        
        if ( status == true ) {
            
            request.setAttribute( "sugestoes", sugestoes );
            request.setAttribute( "pages", "listaSugestao.jsp" );
            
            RequestDispatcher disptcher  = getServletContext().getRequestDispatcher( "/principalAdmin.jsp" );
            disptcher.forward( request, response );
            
        } else {
            request.setAttribute( "mensagem", "Erro ao remover" ); // ARRUMAR !!!!!!!!!!!!!!!!!!
            request.setAttribute( "voltar", "AdminController?comando=listaSugestao" );
            
            RequestDispatcher dispatcher = getServletContext().getRequestDispatcher( "/resposta.jsp" ); //
            dispatcher.forward( request, response );
            
        }
        
    }

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
}


protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
}

}[/code]
Fiquem com Deus!!

[code]public interface Command{
public void execute();
}

public class ListarSugestaoCommand implements Command{
public void execute(){
//codigo
}
}

public class ExcluirSugestaoCommand implements Command{
public void execute(){
//codigo
}
}

public class AdminController extends HttpServlet {
private Map<String, Command> comandos;

public AdminController(){
comandos = new HashMap<String, Command>();
comandos.put("listarSugestao", new ListarSugestaoCommand());
comandos.put("excluirSugestao", new ExcluirSugestaoCommand());
}

protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//inicio do codigo
Command cmd = comandos.get(comando);
cmd.execute();
//restante do codigo
}
}[/code]

Na realidade pra funcionar bem mesmo tem que ser muito mais sofisticado que isso, e é por isso que todo mundo prefere pegar um Framework que tem isso pronto como o Mentawai, Webwork, Struts, etc… mas se esse for um daqueles casos em que você mesmo tem que fazer (estudo basicamente), tente dar uma olhada no codigo de algum framework opensource pra você ver como funciona… sugiro: http://www.mentaframework.org

Cara!! Valeu mesmo!!! Tava querendo aprender isso faz algum tempo!!
Fique com Deus!!!
:grin:

Me empolguei com isso agora, tava lendo que também pode-se utilizar um Factory de Command!! Mas qual a real necessidade de se usar ele?
Dae o meu controller chamava o FactoryCommand e ele verificaria quem chamaria!! Quais as situações qie isso seria necessário?
Valeu!!

A ideia de um Factory (de qualquer coisa, não só de disso aí…) é tirar a responsabilidade da classe usuaria de criar os objetos que usa… assim se um dia esses objetos mudarem, a classe usuaria nem vai perceber…

Dá uma olhada no pattern Factory:


Recomendo o livro “Head First: Design Patterns” (português: “Use a cabeça: Padrões de projetos”)