From b5c6a89ec9a14d39ad8aafa149710dc83ab21619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Sat, 29 Aug 2020 21:55:51 +0300 Subject: [PATCH] Update README.md --- multiton/README.md | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/multiton/README.md b/multiton/README.md index 85ce3acf2..07a4bf895 100644 --- a/multiton/README.md +++ b/multiton/README.md @@ -9,16 +9,19 @@ tags: --- ## Also known as + Registry ## Intent + Ensure a class only has limited number of instances and provide a global point of access to them. ## Explanation Real world example -> The Nazgûl, also called ringwraiths or the Nine Riders, are Sauron's most terrible servants. By definition there's always nine of them. +> The Nazgûl, also called ringwraiths or the Nine Riders, are Sauron's most terrible servants. By +> definition there's always nine of them. In plain words @@ -26,11 +29,14 @@ In plain words Wikipedia says -> In software engineering, the multiton pattern is a design pattern which generalizes the singleton pattern. Whereas the singleton allows only one instance of a class to be created, the multiton pattern allows for the controlled creation of multiple instances, which it manages through the use of a map. +> In software engineering, the multiton pattern is a design pattern which generalizes the singleton +> pattern. Whereas the singleton allows only one instance of a class to be created, the multiton +> pattern allows for the controlled creation of multiple instances, which it manages through the use +> of a map. **Programmatic Example** -Nazgul is the multiton class. +`Nazgul` is the multiton class. ```java public enum NazgulName { @@ -71,7 +77,7 @@ public final class Nazgul { } ``` -And here's how we access the Nazgul instances. +And here's how we access the `Nazgul` instances. ```java LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL)); @@ -83,22 +89,29 @@ And here's how we access the Nazgul instances. LOGGER.info("ADUNAPHEL={}", Nazgul.getInstance(NazgulName.ADUNAPHEL)); LOGGER.info("REN={}", Nazgul.getInstance(NazgulName.REN)); LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA)); - - // KHAMUL=com.iluwatar.multiton.Nazgul@2b214b94 - // MURAZOR=com.iluwatar.multiton.Nazgul@17814b1c - // DWAR=com.iluwatar.multiton.Nazgul@7ac9af2a - // JI_INDUR=com.iluwatar.multiton.Nazgul@7bb004b8 - // AKHORAHIL=com.iluwatar.multiton.Nazgul@78e89bfe - // HOARMURATH=com.iluwatar.multiton.Nazgul@652ce654 - // ADUNAPHEL=com.iluwatar.multiton.Nazgul@522ba524 - // REN=com.iluwatar.multiton.Nazgul@29c5ee1d - // UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0 +``` + +Program output: + +``` +KHAMUL=com.iluwatar.multiton.Nazgul@2b214b94 +MURAZOR=com.iluwatar.multiton.Nazgul@17814b1c +DWAR=com.iluwatar.multiton.Nazgul@7ac9af2a +JI_INDUR=com.iluwatar.multiton.Nazgul@7bb004b8 +AKHORAHIL=com.iluwatar.multiton.Nazgul@78e89bfe +HOARMURATH=com.iluwatar.multiton.Nazgul@652ce654 +ADUNAPHEL=com.iluwatar.multiton.Nazgul@522ba524 +REN=com.iluwatar.multiton.Nazgul@29c5ee1d +UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0 ``` ## Class diagram + ![alt text](./etc/multiton.png "Multiton") ## Applicability + Use the Multiton pattern when -* there must be specific number of instances of a class, and they must be accessible to clients from a well-known access point +* There must be specific number of instances of a class, and they must be accessible to clients from +a well-known access point.