Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Criação da factory de mapas

No exercício do capitulo 6 que pergunta como tornar flexível a implementação de mapa que usaríamos, não consegui visualizar como seria criada essa Factory para tornar a escolha flexível.Vocês poderiam me ajudar?

2 respostas

Pensei em algo assim:

package br.com.caelum.dp.bridge_e_adpter;


public class MapaFactory {

    public Mapa getMapa(String strMapa) {
        Mapa mapa;

        switch(strMapa) {
            case "google":
                mapa = new GoogleMaps();
                break;
            case "maplink":
                mapa = new MapLink();
                break;
            default:
                throw new IllegalArgumentException("Mapa Inválido!");
        }

        return mapa;
    }
}

public class Programa {


    public static void main(String[] args) throws Exception {

        Mapa mapa = new MapaFactory().getMapa("google"); // Bridge com Factory
        mapa.devolve("rua lopes trovão");

    }
}
solução!

Pensei algo assim!

package br.com.brunobs.br.BridgesAdapters;

import java.util.HashMap;
import java.util.Map;

public enum MAP {
    GOOGLE("Google Maps") {
        @Override
        Mapa getInstancia() {
            return new GoogleMaps();
        }
    },
    MAP_LINK("Map Link") {
        @Override
        Mapa getInstancia() {
            return new MapLink();
        }
    };

    private final String descricao;
    private static Map<String, MAP> maps = new HashMap<String, MAP>();
    static {
        for (MAP map : MAP.values()) {
            maps.put(map.descricao, map);
        }

    }

    abstract Mapa getInstancia();

    private MAP(String descricao) {
        this.descricao = descricao;
    }

    public static MAP fromDescricao(String descricao) {
        MAP map = maps.get(descricao);
        if (map == null) {
            throw new RuntimeException("Descrição Inválida!");
        }
        return map;
    }

}