Skip to content

Commit c87689b

Browse files
iluwatarohbus
andauthored
task: Update Multiton example (iluwatar#1950)
Co-authored-by: Subhrodip Mohanta <[email protected]>
1 parent 5ce0419 commit c87689b

File tree

3 files changed

+53
-27
lines changed

3 files changed

+53
-27
lines changed

multiton/README.md

Lines changed: 48 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@ Registry
1515

1616
## Intent
1717

18-
Ensure a class only has limited number of instances and provide a global point of access to them.
18+
Ensure a class only has a limited number of instances and provide a global point of access to them.
1919

2020
## Explanation
2121

22-
Real world example
22+
Real-world example
2323

2424
> The Nazgûl, also called ringwraiths or the Nine Riders, are Sauron's most terrible servants. By
25-
> definition there's always nine of them.
25+
> definition, there's always nine of them.
2626
2727
In plain words
2828

29-
> Multiton pattern ensures there's predefined amount of instances available globally.
29+
> Multiton pattern ensures there are a predefined amount of instances available globally.
3030
3131
Wikipedia says
3232

@@ -81,29 +81,54 @@ public final class Nazgul {
8181
And here's how we access the `Nazgul` instances.
8282

8383
```java
84-
LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL));
85-
LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR));
86-
LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR));
87-
LOGGER.info("JI_INDUR={}", Nazgul.getInstance(NazgulName.JI_INDUR));
88-
LOGGER.info("AKHORAHIL={}", Nazgul.getInstance(NazgulName.AKHORAHIL));
89-
LOGGER.info("HOARMURATH={}", Nazgul.getInstance(NazgulName.HOARMURATH));
90-
LOGGER.info("ADUNAPHEL={}", Nazgul.getInstance(NazgulName.ADUNAPHEL));
91-
LOGGER.info("REN={}", Nazgul.getInstance(NazgulName.REN));
92-
LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA));
84+
// eagerly initialized multiton
85+
LOGGER.info("Printing out eagerly initialized multiton contents");
86+
LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL));
87+
LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR));
88+
LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR));
89+
LOGGER.info("JI_INDUR={}", Nazgul.getInstance(NazgulName.JI_INDUR));
90+
LOGGER.info("AKHORAHIL={}", Nazgul.getInstance(NazgulName.AKHORAHIL));
91+
LOGGER.info("HOARMURATH={}", Nazgul.getInstance(NazgulName.HOARMURATH));
92+
LOGGER.info("ADUNAPHEL={}", Nazgul.getInstance(NazgulName.ADUNAPHEL));
93+
LOGGER.info("REN={}", Nazgul.getInstance(NazgulName.REN));
94+
LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA));
95+
96+
// enum multiton
97+
LOGGER.info("Printing out enum-based multiton contents");
98+
LOGGER.info("KHAMUL={}", NazgulEnum.KHAMUL);
99+
LOGGER.info("MURAZOR={}", NazgulEnum.MURAZOR);
100+
LOGGER.info("DWAR={}", NazgulEnum.DWAR);
101+
LOGGER.info("JI_INDUR={}", NazgulEnum.JI_INDUR);
102+
LOGGER.info("AKHORAHIL={}", NazgulEnum.AKHORAHIL);
103+
LOGGER.info("HOARMURATH={}", NazgulEnum.HOARMURATH);
104+
LOGGER.info("ADUNAPHEL={}", NazgulEnum.ADUNAPHEL);
105+
LOGGER.info("REN={}", NazgulEnum.REN);
106+
LOGGER.info("UVATHA={}", NazgulEnum.UVATHA);
93107
```
94108

95109
Program output:
96110

97111
```
98-
KHAMUL=com.iluwatar.multiton.Nazgul@2b214b94
99-
MURAZOR=com.iluwatar.multiton.Nazgul@17814b1c
100-
DWAR=com.iluwatar.multiton.Nazgul@7ac9af2a
101-
JI_INDUR=com.iluwatar.multiton.Nazgul@7bb004b8
102-
AKHORAHIL=com.iluwatar.multiton.Nazgul@78e89bfe
103-
HOARMURATH=com.iluwatar.multiton.Nazgul@652ce654
104-
ADUNAPHEL=com.iluwatar.multiton.Nazgul@522ba524
105-
REN=com.iluwatar.multiton.Nazgul@29c5ee1d
106-
UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0
112+
20:35:07.413 [main] INFO com.iluwatar.multiton.App - Printing out eagerly initialized multiton contents
113+
20:35:07.417 [main] INFO com.iluwatar.multiton.App - KHAMUL=com.iluwatar.multiton.Nazgul@48cf768c
114+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - MURAZOR=com.iluwatar.multiton.Nazgul@7960847b
115+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - DWAR=com.iluwatar.multiton.Nazgul@6a6824be
116+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - JI_INDUR=com.iluwatar.multiton.Nazgul@5c8da962
117+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - AKHORAHIL=com.iluwatar.multiton.Nazgul@512ddf17
118+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - HOARMURATH=com.iluwatar.multiton.Nazgul@2c13da15
119+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - ADUNAPHEL=com.iluwatar.multiton.Nazgul@77556fd
120+
20:35:07.419 [main] INFO com.iluwatar.multiton.App - REN=com.iluwatar.multiton.Nazgul@368239c8
121+
20:35:07.420 [main] INFO com.iluwatar.multiton.App - UVATHA=com.iluwatar.multiton.Nazgul@9e89d68
122+
20:35:07.420 [main] INFO com.iluwatar.multiton.App - Printing out enum-based multiton contents
123+
20:35:07.420 [main] INFO com.iluwatar.multiton.App - KHAMUL=KHAMUL
124+
20:35:07.420 [main] INFO com.iluwatar.multiton.App - MURAZOR=MURAZOR
125+
20:35:07.420 [main] INFO com.iluwatar.multiton.App - DWAR=DWAR
126+
20:35:07.420 [main] INFO com.iluwatar.multiton.App - JI_INDUR=JI_INDUR
127+
20:35:07.421 [main] INFO com.iluwatar.multiton.App - AKHORAHIL=AKHORAHIL
128+
20:35:07.421 [main] INFO com.iluwatar.multiton.App - HOARMURATH=HOARMURATH
129+
20:35:07.421 [main] INFO com.iluwatar.multiton.App - ADUNAPHEL=ADUNAPHEL
130+
20:35:07.421 [main] INFO com.iluwatar.multiton.App - REN=REN
131+
20:35:07.421 [main] INFO com.iluwatar.multiton.App - UVATHA=UVATHA
107132
```
108133

109134
## Class diagram
@@ -114,5 +139,5 @@ UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0
114139

115140
Use the Multiton pattern when
116141

117-
* There must be specific number of instances of a class, and they must be accessible to clients from
142+
* There must be a specific number of instances of a class, and they must be accessible to clients from
118143
a well-known access point.

multiton/src/main/java/com/iluwatar/multiton/App.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@
2626
import lombok.extern.slf4j.Slf4j;
2727

2828
/**
29-
* Whereas Singleton design pattern introduces single globally accessible object the Multiton
29+
* Whereas Singleton design pattern introduces single globally accessible object, the Multiton
3030
* pattern defines many globally accessible objects. The client asks for the correct instance from
31-
* the Multiton by passing an enumeration as parameter.
31+
* the Multiton by passing an enumeration as a parameter.
3232
*
3333
* <p>There is more than one way to implement the multiton design pattern. In the first example
3434
* {@link Nazgul} is the Multiton and we can ask single {@link Nazgul} from it using {@link
35-
* NazgulName}. The {@link Nazgul}s are statically initialized and stored in concurrent hash map.
35+
* NazgulName}. The {@link Nazgul}s are statically initialized and stored in a concurrent hash map.
3636
*
3737
* <p>In the enum implementation {@link NazgulEnum} is the multiton. It is static and mutable
3838
* because of the way java supports enums.
@@ -47,6 +47,7 @@ public class App {
4747
*/
4848
public static void main(String[] args) {
4949
// eagerly initialized multiton
50+
LOGGER.info("Printing out eagerly initialized multiton contents");
5051
LOGGER.info("KHAMUL={}", Nazgul.getInstance(NazgulName.KHAMUL));
5152
LOGGER.info("MURAZOR={}", Nazgul.getInstance(NazgulName.MURAZOR));
5253
LOGGER.info("DWAR={}", Nazgul.getInstance(NazgulName.DWAR));
@@ -58,6 +59,7 @@ public static void main(String[] args) {
5859
LOGGER.info("UVATHA={}", Nazgul.getInstance(NazgulName.UVATHA));
5960

6061
// enum multiton
62+
LOGGER.info("Printing out enum-based multiton contents");
6163
LOGGER.info("KHAMUL={}", NazgulEnum.KHAMUL);
6264
LOGGER.info("MURAZOR={}", NazgulEnum.MURAZOR);
6365
LOGGER.info("DWAR={}", NazgulEnum.DWAR);

multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,4 @@ void testGetInstance() {
4848
assertEquals(name, nazgul.getName());
4949
}
5050
}
51-
5251
}

0 commit comments

Comments
 (0)