提交 30ef7126 编写于 作者: 小傅哥's avatar 小傅哥

小傅哥 | 重学 Java 设计模式:实战单例模式

上级 01abf0c9
......@@ -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
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://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>
\ No newline at end of file
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>();
}
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();
}
}
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();
}
}
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;
}
}
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;
}
}
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;
}
}
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
}
}
package org.itstack.demo.design;
public enum Singleton_07 {
INSTANCE;
public void test(){
System.out.println("hi~");
}
}
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();
}
}
......@@ -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>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册