Ho un'interfaccia denominata Parser
. Due classi ParserA, ParserB
implementa Parser
.Devo usare l'inizializzatore statico o la super classe
public interface Parser{
public void initialize();
public int Parse(byte[] data);
}
Ho confusione con l'inizializzazione. ParserA
inizializza due Maps
. ParserB
inizializza due Maps
. Ma diversi dati. Maps
sono inizializzati con dati costanti. Significa non dal runtime.
Quindi dovrei usare approach1 o 2?
Approach1:
class Initializer{
//have two maps as member
}
Class ParserA extents initializer implements Parser{
public int Parse(byte[] data){
}
public void initialize(){
//Initialize those maps
}
}
Similarly for class B
Approach2:
class Constants{
//Static initializer of four maps[two for ParserA, two for ParserB]
}
Class ParserA implements Parser{
public int Parse(byte[] data){
}
public void initialize(){
//Constants.map1 likewise use.
}
}
Similarly for class B
che è preferito nel caso d'uso di cui sopra?
Q2: Ho un altro metodo di utilità nella classe Initializer
. Lascia che sia getAttr
che utilizza queste due mappe. In questo scenario, quale approccio è migliore?
Q3 Se si desidera multiple threads to use these parsers
e si assume che scelgo l'approccio 1, si verifica inutile intiailization su ciascun thread. Questo è ciò che veramente mi confonde.
Sono un po 'più confuso.
Si supponga che Animal
sia una classe base per Tiger, Lion
. Ogni animale avrà age, numOfLegs
come membri. Avrà senso avere la classe Animal
invece di avere age, numOfLegs
in ogni classe di Animal. Quindi, Superclass
vince qui. non lo è? Se è così, immagino che anche il mio scenario sia simile a questo.
In Q2 il metodo getAttr accede a entrambe le mappe o ParserA.getAttr accede alla mappa del parserA e al parserB ParserB? –
Vai con la seconda opzione. – EpicPandaForce
@FrancescLordan Sì. ParserA.getAttr accede al parserA mappa e parserB ParserB's –