+package pnews.servlet;
+
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+
+import pnews.Article;
+
+public class ArticleStore {
+ public final static ArticleStore singleton = new ArticleStore();
+ private final HashMap<String, WeakReference<Article>> articles = new HashMap<>();
+
+ public Article get(String link) {
+ WeakReference<Article> ref;
+
+ synchronized (articles) {
+ ref = articles.get(link);
+ if (ref == null)
+ return null;
+ return ref.get();
+ }
+ }
+
+ public Article getArticle(String link, ArticleFactory factory) {
+ Article result;
+
+ synchronized (articles) {
+ result = get(link);
+ if (result == null) {
+ result = factory.create();
+ articles.put(link, new WeakReference<>(result));
+ }
+
+ return result;
+ }
+ }
+}