단일 모드 (8 가지 실현 방식)
6307 단어 디자인 모드
1. 굶 주 린 사람
/**
*
* : 、
* : ( , )
*/
public class HungraySingleton {
// ,
private static final HungraySingleton instance = new HungraySingleton();
//
public HungraySingleton() {
}
//
public final static HungraySingleton getInstance(){
return instance;
}
}
2、 굶 주 린 한 예 - 정적 코드 블록 (설치)
/**
*
*/
public class HungrayStaticSingleton {
private static final HungrayStaticSingleton instance;
static {
instance = new HungrayStaticSingleton();
}
public HungrayStaticSingleton() {
}
public static HungrayStaticSingleton getInstance(){
return instance;
}
}
3、 게으름뱅이
/**
*
* : ,
* :
*/
public class LazySingleton {
private static LazySingleton instance;
public LazySingleton() {
}
/**
* synchronized ,
*/
public synchronized static final LazySingleton getInstance(){
if (instance == null){
instance = new LazySingleton();
}
return instance;
}
}
4. 게으름뱅이 일례 - 이중 검사 자물쇠
/**
*
* : , ,
* :
*
*/
public class LazyDoubleCheckSingleton {
private volatile static LazyDoubleCheckSingleton instance;
public LazyDoubleCheckSingleton() {
}
public static final LazyDoubleCheckSingleton getInstance() {
// ,
if (instance == null) {
synchronized (LazyDoubleCheckSingleton.class) {
//
if (instance == null) {
instance = new LazyDoubleCheckSingleton();
// volatile
}
}
}
return instance;
}
}
5. 게으름뱅이 - 정적 내부 클래스
**
* ,
* : , ,
* :
*/
public class LazyStaticInnerClassSingleton {
// Java , , ,
// ,
public LazyStaticInnerClassSingleton() {
// ,
if (LazyHoldler.instance != null) {
throw new RuntimeException(" ");
}
}
public static final LazyStaticInnerClassSingleton getInstance() {
return LazyHoldler.instance;
}
private final static class LazyHoldler {
private static final LazyStaticInnerClassSingleton instance = new LazyStaticInnerClassSingleton();
}
}
6. 매 거 사례 (가장 우아 한 단일 사례 실현 모델)
/**
*
* ************************** ******************************
* 。 , JVM 。
*/
public enum EnumSingleton {
INSTANCE;
private String s = null;
private EnumSingleton() {
s = new String();
}
public String getInstance() {
return s;
}
}
7. 등록 식 사례
/**
* ,
* Spring ,
*/
public class ContainerSingleton {
public ContainerSingleton() {
}
private static Map ioc = new ConcurrentHashMap();
public static Object getInstance(String className) {
//
if (!ioc.containsKey(className)) {
synchronized (ioc) {
//
if (!ioc.containsKey(className)) {
Object obj = null;
try {
obj = Class.forName(className).newInstance();
ioc.put(className, obj);
} catch (Exception e) {
}
return obj;
} else {
return ioc.get(className);
}
}
}
return ioc.get(className);
}
}
8. threadLocal 실현 사례
/**
* ThreadLocal
* ;
* ;
* ;
* ;
*/
public class ThreadLocalSingleton {
private static final ThreadLocal threadLocalInstanceThreadLocal
= new ThreadLocal() {
@Override
protected ThreadLocalSingleton initialValue() {
return new ThreadLocalSingleton();
}
};
private ThreadLocalSingleton() {
}
public static ThreadLocalSingleton getInstance() {
return threadLocalInstanceThreadLocal.get();
}
}
public class ThreadLocalRunnable implements Runnable {
public void run() {
ThreadLocalSingleton instance =ThreadLocalSingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " : " + instance);
}
}
ThreadLocalSingleton instance = ThreadLocalSingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " : " + instance);
instance = ThreadLocalSingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " : " + instance);
instance = ThreadLocalSingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " : " + instance);
instance = ThreadLocalSingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " : " + instance);
instance = ThreadLocalSingleton.getInstance();
System.out.println(Thread.currentThread().getName() + " : " + instance);
Thread t1 = new Thread(new ThreadLocalRunnable());
Thread t2 = new Thread(new ThreadLocalRunnable());
t1.start();
t2.start();
System.out.println("Program End");
실행 결과
main : com.pa.designMode.singleton.ThreadLocalSingleton@65ab7765 main : com.pa.designMode.singleton.ThreadLocalSingleton@65ab7765 main : com.pa.designMode.singleton.ThreadLocalSingleton@65ab7765 main : com.pa.designMode.singleton.ThreadLocalSingleton@65ab7765 main : com.pa.designMode.singleton.ThreadLocalSingleton@65ab7765 Program End Thread-0 : com.pa.designMode.singleton.ThreadLocalSingleton@2770f418 Thread-1 : com.pa.designMode.singleton.ThreadLocalSingleton@dc7a4fc
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.