diff --git a/.gitignore b/.gitignore
index ceb33ee3..ee73abd0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,5 @@
/itstack-demo-desgin-4-01/itstack-demo-desgin-4-01.iml
/itstack-demo-design-4-02/itstack-demo-design-4-02.iml
/itstack-demo-design-4-00/itstack-demo-design-4-00.iml
+/itstack-demo-design-5-00/itstack-demo-design-5-00.iml
+/itstack-demo-design-5-01/itstack-demo-design-5-01.iml
diff --git a/itstack-demo-design-5-00/pom.xml b/itstack-demo-design-5-00/pom.xml
new file mode 100644
index 00000000..f4ca70b6
--- /dev/null
+++ b/itstack-demo-design-5-00/pom.xml
@@ -0,0 +1,15 @@
+
+
+
+ itstack-demo-design
+ org.itstack
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ itstack-demo-design-5-00
+
+
+
\ No newline at end of file
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_00.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_00.java
new file mode 100644
index 00000000..65a71e13
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_00.java
@@ -0,0 +1,10 @@
+package org.itstack.demo.design;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class Singleton_00 {
+
+ public static Map cache = new ConcurrentHashMap();
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_01.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_01.java
new file mode 100644
index 00000000..769dfc97
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_01.java
@@ -0,0 +1,15 @@
+package org.itstack.demo.design;
+
+public class Singleton_01 {
+
+ private static Singleton_01 instance;
+
+ private Singleton_01() {
+ }
+
+ public static Singleton_01 getInstance(){
+ if (null != instance) return instance;
+ return new Singleton_01();
+ }
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_02.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_02.java
new file mode 100644
index 00000000..298e846b
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_02.java
@@ -0,0 +1,15 @@
+package org.itstack.demo.design;
+
+public class Singleton_02 {
+
+ private static Singleton_02 instance;
+
+ private Singleton_02() {
+ }
+
+ public static synchronized Singleton_02 getInstance(){
+ if (null != instance) return instance;
+ return new Singleton_02();
+ }
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_03.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_03.java
new file mode 100644
index 00000000..6cbe53f1
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_03.java
@@ -0,0 +1,14 @@
+package org.itstack.demo.design;
+
+public class Singleton_03 {
+
+ private static Singleton_03 instance = new Singleton_03();
+
+ private Singleton_03() {
+ }
+
+ public static Singleton_03 getInstance() {
+ return instance;
+ }
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_04.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_04.java
new file mode 100644
index 00000000..78200252
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_04.java
@@ -0,0 +1,16 @@
+package org.itstack.demo.design;
+
+public class Singleton_04 {
+
+ private static class SingletonHolder {
+ private static Singleton_04 instance = new Singleton_04();
+ }
+
+ private Singleton_04() {
+ }
+
+ public static Singleton_04 getInstance() {
+ return SingletonHolder.instance;
+ }
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_05.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_05.java
new file mode 100644
index 00000000..f247b8f1
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_05.java
@@ -0,0 +1,20 @@
+package org.itstack.demo.design;
+
+public class Singleton_05 {
+
+ private static Singleton_05 instance;
+
+ private Singleton_05() {
+ }
+
+ public static Singleton_05 getInstance(){
+ if(null != instance) return instance;
+ synchronized (Singleton_05.class){
+ if (null == instance){
+ instance = new Singleton_05();
+ }
+ }
+ return instance;
+ }
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_06.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_06.java
new file mode 100644
index 00000000..f108d262
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_06.java
@@ -0,0 +1,29 @@
+package org.itstack.demo.design;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+public class Singleton_06 {
+
+ private static final AtomicReference INSTANCE = new AtomicReference();
+
+ private static Singleton_06 instance;
+
+ private Singleton_06() {
+ }
+
+ public static final Singleton_06 getInstance() {
+ for (; ; ) {
+ Singleton_06 instance = INSTANCE.get();
+ if (null != instance) return instance;
+ INSTANCE.compareAndSet(null, new Singleton_06());
+ return INSTANCE.get();
+ }
+ }
+
+ public static void main(String[] args) {
+ System.out.println(Singleton_06.getInstance()); // org.itstack.demo.design.Singleton_06@2b193f2d
+ System.out.println(Singleton_06.getInstance()); // org.itstack.demo.design.Singleton_06@2b193f2d
+ }
+
+
+}
diff --git a/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_07.java b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_07.java
new file mode 100644
index 00000000..b0b9d799
--- /dev/null
+++ b/itstack-demo-design-5-00/src/main/java/org/itstack/demo/design/Singleton_07.java
@@ -0,0 +1,10 @@
+package org.itstack.demo.design;
+
+public enum Singleton_07 {
+
+ INSTANCE;
+ public void test(){
+ System.out.println("hi~");
+ }
+
+}
diff --git a/itstack-demo-design-5-00/src/test/java/org/itstack/demo/design/test/ApiTest.java b/itstack-demo-design-5-00/src/test/java/org/itstack/demo/design/test/ApiTest.java
new file mode 100644
index 00000000..56fd3281
--- /dev/null
+++ b/itstack-demo-design-5-00/src/test/java/org/itstack/demo/design/test/ApiTest.java
@@ -0,0 +1,14 @@
+package org.itstack.demo.design.test;
+
+import org.itstack.demo.design.Singleton_00;
+import org.itstack.demo.design.Singleton_07;
+import org.junit.Test;
+
+public class ApiTest {
+
+ @Test
+ public void test() {
+ Singleton_07.INSTANCE.test();
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 5293234d..3be58d05 100755
--- a/pom.xml
+++ b/pom.xml
@@ -21,6 +21,7 @@
itstack-demo-design-4-00
itstack-demo-desgin-4-01
itstack-demo-design-4-02
+ itstack-demo-design-5-00