Zunächst einmal alle Parser implementiert die gleiche Schnittstelle:
public class CSVParser implements Parser {}
public class JSONParser implements Parser {}
public class XMLParser implements Parser {}
public class EXCELParser implements Parser {}
Dann werden zwei Lösungen für die Referenz:
1.Get Parsers in einer Methode:
public Parser getParser(String file){
if(file.endsWith(".csv"))
return CSVParser();
if(file.endsWith(".json"))
return JSONParser();
if(file.endsWith(".xml"))
return XMLParser();
else
return EXCELParser();
}
2. Verwendung enum
:
public class ParserEnum {
CSVParser("csv", new CSVParser()),
JSONParser("json", new JSONParser()),
XMLParser("xml", new XMLParser()),
EXCELParser("excel", new EXCELParser);
private String type;
private Parser parser;
ParserEnum(String type, Parser parser) {
this.type = type;
this.parser = parser;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Parser getParser() {
return parser;
}
public void setParser(Parser parser) {
this.parser = parser;
}
}
erhalten
dann Parser von Aufzählungstyp:
public Parser getParser(String file){
if(file.endsWith(".csv"))
return ParserEnum.CSVParser.getParser;
// ...
}
Sie möchten vielleicht die Erweiterung zuerst, d. H. Text nach der letzten Periode, in Kleinbuchstaben konvertieren, dann verwenden Sie eine Zeichenfolge 'switch' Anweisung, aber ansonsten scheint es ok für mich. – Andreas