未验证 提交 c87689b2 编写于 作者: I Ilkka Seppälä 提交者: GitHub

task: Update Multiton example (#1950)

Co-authored-by: NSubhrodip Mohanta <hello@subho.xyz>
上级 5ce0419b
...@@ -15,18 +15,18 @@ Registry ...@@ -15,18 +15,18 @@ Registry
## Intent ## Intent
Ensure a class only has limited number of instances and provide a global point of access to them. Ensure a class only has a limited number of instances and provide a global point of access to them.
## Explanation ## Explanation
Real world example Real-world example
> The Nazgûl, also called ringwraiths or the Nine Riders, are Sauron's most terrible servants. By > The Nazgûl, also called ringwraiths or the Nine Riders, are Sauron's most terrible servants. By
> definition there's always nine of them. > definition, there's always nine of them.
In plain words In plain words
> Multiton pattern ensures there's predefined amount of instances available globally. > Multiton pattern ensures there are a predefined amount of instances available globally.
Wikipedia says Wikipedia says
...@@ -81,29 +81,54 @@ public final class Nazgul { ...@@ -81,29 +81,54 @@ public final class Nazgul {
And here's how we access the `Nazgul` instances. And here's how we access the `Nazgul` instances.
```java ```java
LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL)); // eagerly initialized multiton
LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR)); LOGGER.info("Printing out eagerly initialized multiton contents");
LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR)); LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL));
LOGGER.info("JI_INDUR={}", Nazgul.getInstance(NazgulName.JI_INDUR)); LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR));
LOGGER.info("AKHORAHIL={}", Nazgul.getInstance(NazgulName.AKHORAHIL)); LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR));
LOGGER.info("HOARMURATH={}", Nazgul.getInstance(NazgulName.HOARMURATH)); LOGGER.info("JI_INDUR={}", Nazgul.getInstance(NazgulName.JI_INDUR));
LOGGER.info("ADUNAPHEL={}", Nazgul.getInstance(NazgulName.ADUNAPHEL)); LOGGER.info("AKHORAHIL={}", Nazgul.getInstance(NazgulName.AKHORAHIL));
LOGGER.info("REN={}", Nazgul.getInstance(NazgulName.REN)); LOGGER.info("HOARMURATH={}", Nazgul.getInstance(NazgulName.HOARMURATH));
LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA)); LOGGER.info("ADUNAPHEL={}", Nazgul.getInstance(NazgulName.ADUNAPHEL));
LOGGER.info("REN={}", Nazgul.getInstance(NazgulName.REN));
LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA));
// enum multiton
LOGGER.info("Printing out enum-based multiton contents");
LOGGER.info("KHAMUL={}", NazgulEnum.KHAMUL);
LOGGER.info("MURAZOR={}", NazgulEnum.MURAZOR);
LOGGER.info("DWAR={}", NazgulEnum.DWAR);
LOGGER.info("JI_INDUR={}", NazgulEnum.JI_INDUR);
LOGGER.info("AKHORAHIL={}", NazgulEnum.AKHORAHIL);
LOGGER.info("HOARMURATH={}", NazgulEnum.HOARMURATH);
LOGGER.info("ADUNAPHEL={}", NazgulEnum.ADUNAPHEL);
LOGGER.info("REN={}", NazgulEnum.REN);
LOGGER.info("UVATHA={}", NazgulEnum.UVATHA);
``` ```
Program output: Program output:
``` ```
KHAMUL=com.iluwatar.multiton.Nazgul@2b214b94 20:35:07.413 [main] INFO com.iluwatar.multiton.App - Printing out eagerly initialized multiton contents
MURAZOR=com.iluwatar.multiton.Nazgul@17814b1c 20:35:07.417 [main] INFO com.iluwatar.multiton.App - KHAMUL=com.iluwatar.multiton.Nazgul@48cf768c
DWAR=com.iluwatar.multiton.Nazgul@7ac9af2a 20:35:07.419 [main] INFO com.iluwatar.multiton.App - MURAZOR=com.iluwatar.multiton.Nazgul@7960847b
JI_INDUR=com.iluwatar.multiton.Nazgul@7bb004b8 20:35:07.419 [main] INFO com.iluwatar.multiton.App - DWAR=com.iluwatar.multiton.Nazgul@6a6824be
AKHORAHIL=com.iluwatar.multiton.Nazgul@78e89bfe 20:35:07.419 [main] INFO com.iluwatar.multiton.App - JI_INDUR=com.iluwatar.multiton.Nazgul@5c8da962
HOARMURATH=com.iluwatar.multiton.Nazgul@652ce654 20:35:07.419 [main] INFO com.iluwatar.multiton.App - AKHORAHIL=com.iluwatar.multiton.Nazgul@512ddf17
ADUNAPHEL=com.iluwatar.multiton.Nazgul@522ba524 20:35:07.419 [main] INFO com.iluwatar.multiton.App - HOARMURATH=com.iluwatar.multiton.Nazgul@2c13da15
REN=com.iluwatar.multiton.Nazgul@29c5ee1d 20:35:07.419 [main] INFO com.iluwatar.multiton.App - ADUNAPHEL=com.iluwatar.multiton.Nazgul@77556fd
UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0 20:35:07.419 [main] INFO com.iluwatar.multiton.App - REN=com.iluwatar.multiton.Nazgul@368239c8
20:35:07.420 [main] INFO com.iluwatar.multiton.App - UVATHA=com.iluwatar.multiton.Nazgul@9e89d68
20:35:07.420 [main] INFO com.iluwatar.multiton.App - Printing out enum-based multiton contents
20:35:07.420 [main] INFO com.iluwatar.multiton.App - KHAMUL=KHAMUL
20:35:07.420 [main] INFO com.iluwatar.multiton.App - MURAZOR=MURAZOR
20:35:07.420 [main] INFO com.iluwatar.multiton.App - DWAR=DWAR
20:35:07.420 [main] INFO com.iluwatar.multiton.App - JI_INDUR=JI_INDUR
20:35:07.421 [main] INFO com.iluwatar.multiton.App - AKHORAHIL=AKHORAHIL
20:35:07.421 [main] INFO com.iluwatar.multiton.App - HOARMURATH=HOARMURATH
20:35:07.421 [main] INFO com.iluwatar.multiton.App - ADUNAPHEL=ADUNAPHEL
20:35:07.421 [main] INFO com.iluwatar.multiton.App - REN=REN
20:35:07.421 [main] INFO com.iluwatar.multiton.App - UVATHA=UVATHA
``` ```
## Class diagram ## Class diagram
...@@ -114,5 +139,5 @@ UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0 ...@@ -114,5 +139,5 @@ UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0
Use the Multiton pattern when Use the Multiton pattern when
* There must be specific number of instances of a class, and they must be accessible to clients from * There must be a specific number of instances of a class, and they must be accessible to clients from
a well-known access point. a well-known access point.
...@@ -26,13 +26,13 @@ package com.iluwatar.multiton; ...@@ -26,13 +26,13 @@ package com.iluwatar.multiton;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
/** /**
* Whereas Singleton design pattern introduces single globally accessible object the Multiton * Whereas Singleton design pattern introduces single globally accessible object, the Multiton
* pattern defines many globally accessible objects. The client asks for the correct instance from * pattern defines many globally accessible objects. The client asks for the correct instance from
* the Multiton by passing an enumeration as parameter. * the Multiton by passing an enumeration as a parameter.
* *
* <p>There is more than one way to implement the multiton design pattern. In the first example * <p>There is more than one way to implement the multiton design pattern. In the first example
* {@link Nazgul} is the Multiton and we can ask single {@link Nazgul} from it using {@link * {@link Nazgul} is the Multiton and we can ask single {@link Nazgul} from it using {@link
* NazgulName}. The {@link Nazgul}s are statically initialized and stored in concurrent hash map. * NazgulName}. The {@link Nazgul}s are statically initialized and stored in a concurrent hash map.
* *
* <p>In the enum implementation {@link NazgulEnum} is the multiton. It is static and mutable * <p>In the enum implementation {@link NazgulEnum} is the multiton. It is static and mutable
* because of the way java supports enums. * because of the way java supports enums.
...@@ -47,6 +47,7 @@ public class App { ...@@ -47,6 +47,7 @@ public class App {
*/ */
public static void main(String[] args) { public static void main(String[] args) {
// eagerly initialized multiton // eagerly initialized multiton
LOGGER.info("Printing out eagerly initialized multiton contents");
LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL)); LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL));
LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR)); LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR));
LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR)); LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR));
...@@ -58,6 +59,7 @@ public class App { ...@@ -58,6 +59,7 @@ public class App {
LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA)); LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA));
// enum multiton // enum multiton
LOGGER.info("Printing out enum-based multiton contents");
LOGGER.info("KHAMUL={}", NazgulEnum.KHAMUL); LOGGER.info("KHAMUL={}", NazgulEnum.KHAMUL);
LOGGER.info("MURAZOR={}", NazgulEnum.MURAZOR); LOGGER.info("MURAZOR={}", NazgulEnum.MURAZOR);
LOGGER.info("DWAR={}", NazgulEnum.DWAR); LOGGER.info("DWAR={}", NazgulEnum.DWAR);
......
...@@ -48,5 +48,4 @@ public class NazgulTest { ...@@ -48,5 +48,4 @@ public class NazgulTest {
assertEquals(name, nazgul.getName()); assertEquals(name, nazgul.getName());
} }
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册