У меня есть класс, как показано ниже
public abstract class MyObjectManager {
private final Map<MyKey, MyObject> objects;
private final MySystem system;
MyObjectManager(MySystem inputSystem) {
system = inputSystem;
// also initialize the "objects" field.
}
public void write(MyKey myKey, MyObject myObject) {...}
public MyObject read(MyKey myKey) {...}
public abstract MyObject getNewestObject();
}
Мне нужны два типа ConcreteManager, которые будут иметь различную реализацию карты, например,
Один использует new LinkedHashMap(CAPACITY_1, LOAD_FACTOR_1, true){ // override the removeEldestEntry(){// logic 1}}
.
Другой использует new LinkedHashMap(CAPACITY_2, LOAD_FACTOR_2, false){ // override the removeEldestEntry(){// logic 2}}
.
Я не хочу передавать карту как @param, поскольку реализация карты фиксирована для каждого ConcreteManager.
Должен ли я использовать шаблон стратегии или шаблон фабрики для другой инициализации карты?
Или мне следует переместить поле objects
для каждого класса реализации?Но их реализация read and write
методов во многом дублирует.