Skip to content

Commit

Permalink
小傅哥 | 重学 Java 设计模式:实战单例模式
Browse files Browse the repository at this point in the history
  • Loading branch information
fuzhengwei committed May 31, 2020
1 parent 01abf0c commit 30ef712
Show file tree
Hide file tree
Showing 12 changed files with 161 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
15 changes: 15 additions & 0 deletions itstack-demo-design-5-00/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http:https://maven.apache.org/POM/4.0.0"
xmlns:xsi="http:https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http:https://maven.apache.org/POM/4.0.0 http:https://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>itstack-demo-design</artifactId>
<groupId>org.itstack</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>itstack-demo-design-5-00</artifactId>


</project>
Original file line number Diff line number Diff line change
@@ -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<String,String> cache = new ConcurrentHashMap<String, String>();

}
Original file line number Diff line number Diff line change
@@ -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();
}

}
Original file line number Diff line number Diff line change
@@ -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();
}

}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.itstack.demo.design;

import java.util.concurrent.atomic.AtomicReference;

public class Singleton_06 {

private static final AtomicReference<Singleton_06> INSTANCE = new AtomicReference<Singleton_06>();

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
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.itstack.demo.design;

public enum Singleton_07 {

INSTANCE;
public void test(){
System.out.println("hi~");
}

}
Original file line number Diff line number Diff line change
@@ -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();
}

}
1 change: 1 addition & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
<module>itstack-demo-design-4-00</module>
<module>itstack-demo-desgin-4-01</module>
<module>itstack-demo-design-4-02</module>
<module>itstack-demo-design-5-00</module>
</modules>

<dependencies>
Expand Down

0 comments on commit 30ef712

Please sign in to comment.