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?
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?
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");
}
}
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;
}
}