Skip to content

Commit e417891

Browse files
authored
after the manner of the purifying of the Jews
And there were set there six waterpots of stone, after the manner of the purifying of the Jews, containing two or three firkins apiece (John 2:6)
1 parent b5f9174 commit e417891

1 file changed

Lines changed: 48 additions & 0 deletions

File tree

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
2+
//And there were set there six waterpots of stone, after the manner of the purifying of the Jews, containing two or three firkins apiece (John 2:6)
3+
4+
package com.javarush.task.task37.task3708.cache;
5+
6+
import java.util.LinkedHashMap;
7+
8+
public class LRUCache<K, V> extends LinkedHashMap<K, V> {
9+
private final int capacity;
10+
11+
@Override
12+
protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {
13+
// Remove the eldest element whenever size of cache exceeds the capacity
14+
return (size() > this.capacity);
15+
}
16+
17+
public LRUCache(int capacity) {
18+
// Call constructor of LinkedHashMap with accessOrder set to true to
19+
// achieve LRU Cache behavior
20+
super(capacity + 1, 1.0f, true);
21+
this.capacity = capacity;
22+
}
23+
24+
public V find(K key) {
25+
return super.get(key);
26+
}
27+
28+
public void set(K key, V value) {
29+
super.put(key, value);
30+
}
31+
}
32+
33+
/*
34+
Кеширующий Proxy
35+
Реализация паттерна Proxy предоставляет объект, который контролирует доступ к другому объекту.
36+
Тебе необходимо создать класс CachingProxyRetriever в пакете retrievers, который будет обеспечивать ту же функциональность что и класс OriginalRetriever, но с одним важным дополнением. Необходимо всегда пробовать сначала получить объект из кеша, и только если его там нет - выполнять дорогостоящую операцию загрузки из storage. После получения необходимого объекта из хранилища storage, его необходимо кешировать с помощью объекта типа LRUCache.
37+
Для клиента (в данном случае класс Solution) использование CachingProxyRetriever ничем не должно отличаться от использования класса OriginalRetriever.
38+
P.S. Тебе понадобятся поля типов LRUCache и OriginalRetriever в классе CachingProxyRetriever.
39+
Требования:
40+
1. В классе CachingProxyRetriever должно быть создано поле типа OriginalRetriever.
41+
2. В классе CachingProxyRetriever должно быть создано поле типа LRUCache.
42+
3. Конструктор класса CachingProxyRetriever должен принимать один параметр типа Storage и инициализировать поле типа OriginalRetriever.
43+
4. Метод retrieve класса CachingProxyRetriever должен выполнять поиск подходящего объекта в кеше с помощью метода find.
44+
5. Метод retrieve класса CachingProxyRetriever должен получать объект из хранилища с помощью метода retrieve объекта типа OriginalRetriever и добавлять в кеш, если он не был там найден.
45+
6. Метод retrieve класса CachingProxyRetriever не должен вызывать метод retrieve класса OriginalRetriever, если объект был найден в кеше.
46+
7. Метод retrieve класса CachingProxyRetriever должен возвращать объект, которому в хранилище соответствует id, полученный в качестве параметра.
47+
8. Класс CachingProxyRetriever должен поддерживать интерфейс Retriever.
48+
*/

0 commit comments

Comments
 (0)