Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
QZero_0
java-design-patterns
提交
c87689b2
J
java-design-patterns
项目概览
QZero_0
/
java-design-patterns
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
java-design-patterns
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
c87689b2
编写于
1月 24, 2022
作者:
I
Ilkka Seppälä
提交者:
GitHub
1月 24, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
task: Update Multiton example (#1950)
Co-authored-by:
N
Subhrodip Mohanta
<
hello@subho.xyz
>
上级
5ce0419b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
53 addition
and
27 deletion
+53
-27
multiton/README.md
multiton/README.md
+48
-23
multiton/src/main/java/com/iluwatar/multiton/App.java
multiton/src/main/java/com/iluwatar/multiton/App.java
+5
-3
multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java
multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java
+0
-1
未找到文件。
multiton/README.md
浏览文件 @
c87689b2
...
...
@@ -15,18 +15,18 @@ Registry
## 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
Real
world example
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.
> definition
,
there's always nine of them.
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
...
...
@@ -81,29 +81,54 @@ public final class Nazgul {
And here's how we access the
`Nazgul`
instances.
```
java
LOGGER
.
info
(
"KHAMUL={}"
,
Nazgul
.
getInstance
(
NazgulName
.
KHAMUL
));
LOGGER
.
info
(
"MURAZOR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
MURAZOR
));
LOGGER
.
info
(
"DWAR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
DWAR
));
LOGGER
.
info
(
"JI_INDUR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
JI_INDUR
));
LOGGER
.
info
(
"AKHORAHIL={}"
,
Nazgul
.
getInstance
(
NazgulName
.
AKHORAHIL
));
LOGGER
.
info
(
"HOARMURATH={}"
,
Nazgul
.
getInstance
(
NazgulName
.
HOARMURATH
));
LOGGER
.
info
(
"ADUNAPHEL={}"
,
Nazgul
.
getInstance
(
NazgulName
.
ADUNAPHEL
));
LOGGER
.
info
(
"REN={}"
,
Nazgul
.
getInstance
(
NazgulName
.
REN
));
LOGGER
.
info
(
"UVATHA={}"
,
Nazgul
.
getInstance
(
NazgulName
.
UVATHA
));
// eagerly initialized multiton
LOGGER
.
info
(
"Printing out eagerly initialized multiton contents"
);
LOGGER
.
info
(
"KHAMUL={}"
,
Nazgul
.
getInstance
(
NazgulName
.
KHAMUL
));
LOGGER
.
info
(
"MURAZOR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
MURAZOR
));
LOGGER
.
info
(
"DWAR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
DWAR
));
LOGGER
.
info
(
"JI_INDUR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
JI_INDUR
));
LOGGER
.
info
(
"AKHORAHIL={}"
,
Nazgul
.
getInstance
(
NazgulName
.
AKHORAHIL
));
LOGGER
.
info
(
"HOARMURATH={}"
,
Nazgul
.
getInstance
(
NazgulName
.
HOARMURATH
));
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:
```
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
20:35:07.413 [main] INFO com.iluwatar.multiton.App - Printing out eagerly initialized multiton contents
20:35:07.417 [main] INFO com.iluwatar.multiton.App - KHAMUL=com.iluwatar.multiton.Nazgul@48cf768c
20:35:07.419 [main] INFO com.iluwatar.multiton.App - MURAZOR=com.iluwatar.multiton.Nazgul@7960847b
20:35:07.419 [main] INFO com.iluwatar.multiton.App - DWAR=com.iluwatar.multiton.Nazgul@6a6824be
20:35:07.419 [main] INFO com.iluwatar.multiton.App - JI_INDUR=com.iluwatar.multiton.Nazgul@5c8da962
20:35:07.419 [main] INFO com.iluwatar.multiton.App - AKHORAHIL=com.iluwatar.multiton.Nazgul@512ddf17
20:35:07.419 [main] INFO com.iluwatar.multiton.App - HOARMURATH=com.iluwatar.multiton.Nazgul@2c13da15
20:35:07.419 [main] INFO com.iluwatar.multiton.App - ADUNAPHEL=com.iluwatar.multiton.Nazgul@77556fd
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
...
...
@@ -114,5 +139,5 @@ UVATHA=com.iluwatar.multiton.Nazgul@15cea7b0
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.
multiton/src/main/java/com/iluwatar/multiton/App.java
浏览文件 @
c87689b2
...
...
@@ -26,13 +26,13 @@ package com.iluwatar.multiton;
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
* 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
* {@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
* because of the way java supports enums.
...
...
@@ -47,6 +47,7 @@ public class App {
*/
public
static
void
main
(
String
[]
args
)
{
// eagerly initialized multiton
LOGGER
.
info
(
"Printing out eagerly initialized multiton contents"
);
LOGGER
.
info
(
"KHAMUL={}"
,
Nazgul
.
getInstance
(
NazgulName
.
KHAMUL
));
LOGGER
.
info
(
"MURAZOR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
MURAZOR
));
LOGGER
.
info
(
"DWAR={}"
,
Nazgul
.
getInstance
(
NazgulName
.
DWAR
));
...
...
@@ -58,6 +59,7 @@ public class App {
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
);
...
...
multiton/src/test/java/com/iluwatar/multiton/NazgulTest.java
浏览文件 @
c87689b2
...
...
@@ -48,5 +48,4 @@ public class NazgulTest {
assertEquals
(
name
,
nazgul
.
getName
());
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录