[RESOLVIDO] Substituir Ifs e usar padrão Strategy

Olá Pessoal, boa tarde… tenho um sistema em que vou refatorar algumas classes e usar o padrão strategy.

Seria mais ou menos assim. Eu tenho várias lojas, e cada loja possui uma maneira de calcular as taxas. Quando eu entro no sistema eu faço uma querie no banco para carregar a minha loja…

Agora vem a minha dúvida… quero substituir os IFS com os códigos das lojas que fazem a ligação com o tipo de taxa que eu vou calcular…

por Ex: Carreguei a loja id = 5 que dentro do sistema calcula IOF. Não quero que no meu código eu tenha o seguinte:

if(id==5) Imposto imposto = new IOF();

else if (id==6) Imposto = new ICMS();

Ou seja, eu preciso colocar Ifs para decidir qual objeto eu irei instanciar, pois eu estou buscando do banco de dados o código da loja e o tipo de imposto.

Estou confuso na utilização de algum padrão para resolver esse detalhe…

se alguém puder ajudar, fico grato.

Obrigado,

Paulo

Strategy tem if tbem, mas é mais elegante usar enum…

eis um exemplo:

//interface com algum metedo e tal...
public interface Locomocao{}

//classes concretas
public class Carro implements Locomocao{}
public class Moto implements Locomocao{}
public class Bicicleta implements Locomocao{}
public class Skate implements Locomocao{}

//enum pra ficar elegante
public enum TipoLocomocao{}

//Escolher qual Estratégia
public class LocomocaoFactory{
      
    public Locomocao escolherEstrategia(TipoLocomocao tipo){
           switch(tipo){
               case TipoLocomocao.SKATE: return new Skate();
               //outros aqui
               default: throw new Exception("Tipo nao reconhecido");
          }
    }
}


Opa, muito obrigado !!! Tinha pensado em algo como um mapa, mas posso adaptar usar enum também… algo como passar o código e me retornar a descrição na enum…

Valew mesmo !!

Não tem como evitar os if’s pois em determinado momento você vai precisar saber quem é quem.

Mas usar Strategy e Factory deixa a coisa mais elegante (e ao meu ver mais mantenível, pois a tomada de decisão esta no Factory e não espalhada em vários pontos).

Abraço.

Show de bola !!! isso ae, Strategy com Factory… valeu !!

Por favor,

se sua dúvida foi resolvida, coloque um [Resolvido] no
título do teu primeiro post :wink:

abraçãoo