Olá…
Estou criando um controller simples e estou com algumas dúvidas:
No controller eu tenho o seguinte trecho de código:
[code]String page = null;
Command command = CommandFactory.getCommand(request.getParameter(“action”));
page = command.execute(request);
[/code]
e tenho a factory que cria os commands:
[code]public static MovieCommand getCommand(String action) {
switch(Integer.parseInt(action)) {
case 1:
return new MovieCommand();
default: return null;
}
}[/code]
Esse esquema está funcionando legal…
Caso o parâmetro action seja igual a 1, o MovieCommand será instanciado.
Só que eu terei vários tipos de actions:
incluir movie
alterar movie
etc…
Qual seria a melhor forma de implementar isso, de forma que minha factory não fique gigantesca ?
Obrigado pela atenção!
rflprp
#2
Não sei se a forma que estou usando é a melhor, até agora está funcionando bem, e bem simples:
package br.com.dogato.controle;
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.dogato.controle.actions.*;
public class PetController extends HttpServlet {
private HashMap actions = new HashMap();
public void init() throws ServletException {
actions.put("login", new ActionLogin());
actions.put("logout", new ActionLogout());
actions.put("erro", new ActionErro());
actions.put("cadUsu", new ActionCadastroCliente());
}
private Action getAction(String chave){
try{
System.out.println("Chave " + chave);
Action acao = (Action)actions.get(chave);
if(acao == null){
System.out.println("Acao nula");
return (Action)actions.get("login");
}
else{
System.out.println(((Action)actions.get(chave)).getClass());
return (Action)actions.get(chave);
}
}
catch(Exception e){
e.printStackTrace();
return (Action)actions.get("login");
}
}
protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
service(arg0, arg1);
}
protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
service(arg0, arg1);
}
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String actionType = request.getParameter("actionType");
System.out.println(actionType);
Action acao = getAction(actionType);
acao.execute(request,response);
}
}