У меня есть интерфейс с именем Parser
. Два класса ParserA, ParserB
реализует Parser
.Должен ли я использовать статический инициализатор или суперкласс
public interface Parser{
public void initialize();
public int Parse(byte[] data);
}
У меня путаница с инициализацией. ParserA
инициализирует два Maps
. ParserB
инициализирует два Maps
. Но differentData. Maps
инициализируются постоянными данными. Средство не от времени выполнения.
Должен ли я использовать подход 1 или 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
Что является предпочтительным в вышеупомянутом случае использования?
Q2: У меня есть другой способ утилизации в классе Initializer
. Пусть это будет getAttr
, который использует эти две карты. В этом сценарии, какой подход лучше?
Q3 Если я хочу multiple threads to use these parsers
и предположим, что я выбираю подход 1, в каждой нити возникает ненужная intiailization. Это то, что меня смущает.
Я немного больше смущен.
Предполагается, что Animal
является базовым классом для Tiger, Lion
. Каждое Животное будет иметь age, numOfLegs
в качестве членов. Имеет смысл иметь класс Animal
, а не age, numOfLegs
в каждом классе животных. Таким образом, Superclass
выигрывает здесь. Разве нет? Если это так, мой сценарий также аналогичен этому, я предполагаю.
В Q2 метод getAttr обращается к обеим картам или ParserA.getAttr обращается к карте и парсеру parserB в парсере B? –
Пойдите со вторым вариантом. – EpicPandaForce
@FrancescLordan Да. ParserA.getAttr обращается к карте и парсеру parserB ParserB –