From 3074e7f7b7aa39636c95bfd9349752eb35a95923 Mon Sep 17 00:00:00 2001 From: Sagar Kanojia Date: Wed, 10 Feb 2021 22:48:28 +0530 Subject: [PATCH 1/2] Change: make prototype registry class singleton --- .../designPatterns/prototype/PrototypeDemo.java | 6 +++--- src/oops/designPatterns/prototype/Registry.java | 14 +++++++++++++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/oops/designPatterns/prototype/PrototypeDemo.java b/src/oops/designPatterns/prototype/PrototypeDemo.java index e77eff9b..7839da47 100644 --- a/src/oops/designPatterns/prototype/PrototypeDemo.java +++ b/src/oops/designPatterns/prototype/PrototypeDemo.java @@ -5,8 +5,8 @@ public class PrototypeDemo { public static void main(String[] args) { - Registry registry = new Registry(); - Movie movie = (Movie) registry.createItem("Movie"); + Registry registry = Registry.getInstance(); + Movie movie = (Movie) registry.createItem("ShortMovie"); movie.setTitle("The Prestige"); System.out.println(movie); @@ -14,7 +14,7 @@ public static void main(String[] args) { System.out.println(movie.getTitle()); System.out.println(movie.getUrl()); - Movie anotherMovie = (Movie) registry.createItem("Movie"); + Movie anotherMovie = (Movie) registry.createItem("ArtMovie"); anotherMovie.setTitle("Gang of Wassepur"); System.out.println(anotherMovie); diff --git a/src/oops/designPatterns/prototype/Registry.java b/src/oops/designPatterns/prototype/Registry.java index 0b62a0e7..cc984654 100644 --- a/src/oops/designPatterns/prototype/Registry.java +++ b/src/oops/designPatterns/prototype/Registry.java @@ -13,10 +13,22 @@ public class Registry { private Map items = new HashMap(); - public Registry() { + private static Registry instance = null; + + private Registry() { loadItems(); } + public static Registry getInstance() { + + if (instance == null) { + instance = new Registry(); + } + + return instance; + } + + public Item createItem (String type) { Item item = null; From 75afa4ca251473d66d587f74adb17412483562a7 Mon Sep 17 00:00:00 2001 From: Sagar Kanojia Date: Wed, 10 Feb 2021 23:15:50 +0530 Subject: [PATCH 2/2] Change: make singleton class thread safe --- .../designPatterns/prototype/Registry.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/oops/designPatterns/prototype/Registry.java b/src/oops/designPatterns/prototype/Registry.java index cc984654..5e471b50 100644 --- a/src/oops/designPatterns/prototype/Registry.java +++ b/src/oops/designPatterns/prototype/Registry.java @@ -13,19 +13,28 @@ public class Registry { private Map items = new HashMap(); - private static Registry instance = null; + private static volatile Registry instance; + + private static Object mutex = new Object(); private Registry() { loadItems(); } - + public static Registry getInstance() { - if (instance == null) { - instance = new Registry(); + Registry result = instance; + + if (result == null) { + synchronized (mutex) { + result = instance; + if (result == null) { + instance = result = new Registry(); + } + } } - return instance; + return result; }