Я тестирую свои знания Java и навыки ООП. Проект, над которым я сейчас работаю, имеет класс модели одноэлементных данных, который использует структуру данных ArrayList.
public class FundingRequestData {
private ArrayList<FundingRequest> fundingRequests;
private static FundingRequestData instance = new FundingRequestData();
public static FundingRequestData getInstance() { return instance; }
public FundingRequestData() {
this.fundingRequests = new ArrayList<>();
}
public FundingRequestData(ArrayList<FundingRequest> fundingRequests) {
this.fundingRequests = fundingRequests;
}
public void add(FundingRequest newFundingRequest) {
this.fundingRequests.add(newFundingRequest);
}
public ArrayList<FundingRequest> getFundingRequests() {
return fundingRequests;
}
}
ArrayList содержит объекты типа FundingRequest
, которые на самом деле являются абстрактными объектами с двумя конкретными подклассами FixedFundingRequest
, TrackerFundngRequest
, унаследованными от него. Эти два объекта подкласса оба загружаются в ArrayList, так как мне нужно удобное хранилище для всех FundingRequest
объектов.
Однако мне также нужно обращаться к объектам подкласса по отдельности, и, например, может быть случай, когда будет крайне неэффективно проходить по одному ArrayList для поиска FixedFundingRequest
объектов, если подавляющее большинство являются TrackerFundingRequest
объектами.
Решение, которое я представляю, состоит в том, чтобы добавить код, чтобы у класса FundingRequestData
был не один, а три объекта ArrayList, чтобы обеспечить более эффективный поиск, когда я ищу конкретного потомка класса FundingRequest
:
public class FundingRequestData {
private ArrayList<FundingRequest> fundingRequests;
private ArrayList<FixedFundingRequest> fixedFundingRequests;
private ArrayList<TrackerFundingRequest> trackerFundingRequests;
private static FundingRequestData instance = new FundingRequestData();
public static FundingRequestData getInstance() { return instance; }
public FundingRequestData() {
this.fundingRequests = new ArrayList<>();
this.fixedFundingRequests = new ArrayList<>();
this.trackerFundingRequests = new ArrayList<>();
}
public FundingRequestData(ArrayList<FundingRequest> fundingRequests) {
// loop through objects & use add methods to initialise arrays
}
public void add(FixedFundingRequest newFundingRequest) {
this.fundingRequests.add(newFundingRequest);
this.fixedFundingRequests.add(newFundingRequest);
}
public void add(TrackerFundingRequest newFundingRequest) {
this.fundingRequests.add(newFundingRequest);
this.trackerFundingRequests.add(newFundingRequest);
}
public ArrayList<FundingRequest> getFundingRequests() {
return fundingRequests;
}
public ArrayList<FixedFundingRequest> getFixedFundingRequests() {
return fixedFundingRequests;
}
public ArrayList<TrackerFundingRequest> getTrackerFundingRequests() {
return trackerFundingRequests;
}
}
Из того, что я описал (и я могу предоставить больше информации, если этого недостаточно), может ли кто-нибудь помочь мне понять подводные камни в этом проекте, и что может быть лучше? Я не знаю, если этот вид дизайна обязательно осуждают, но это не кажется правильным. Опять же - без реализации все большего количества классов, я не знаю никакой альтернативы.