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