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..5e471b50 100644 --- a/src/oops/designPatterns/prototype/Registry.java +++ b/src/oops/designPatterns/prototype/Registry.java @@ -13,9 +13,30 @@ public class Registry { private Map items = new HashMap(); - public Registry() { + private static volatile Registry instance; + + private static Object mutex = new Object(); + + private Registry() { loadItems(); } + + public static Registry getInstance() { + + Registry result = instance; + + if (result == null) { + synchronized (mutex) { + result = instance; + if (result == null) { + instance = result = new Registry(); + } + } + } + + return result; + } + public Item createItem (String type) { Item item = null;