일례 의 8 가지 표기 법
5870 단어 디자인 모드
, 。 。 , 。
, 。
, 。 , , , 。 。
( ) ( , getInstance )。
:
1. , , ;
2. , , , 。
:
。 , , , , , 。 ( )。
, , , 。
, , new, , 。
;
, ;
;
。
실례:
1. 굶 주 린 사람
public class Singleton1 {
private static final Singleton1 singleton1 = new Singleton1();
private Singleton1(){}
public static Singleton1 getInstance(){
return singleton1;
}
}
* : , 。 。
* : , Lazy Loading 。 , 。
public class Singleton2 {
private static Singleton2 singleton2;
static {
singleton2 = new Singleton2();
}
private Singleton2(){}
public static Singleton2 getInstance(){
return singleton2;
}
}
* ( )[ ]
* Singleton1 , , , , 。 。
2. 게으름뱅이
public class Singleton3 {
private static Singleton3 singleton3;
private Singleton3(){}
public static Singleton3 getInstance(){
if(singleton3 == null){
singleton3 = new Singleton3();
}
return singleton3;
}
}
* @Description ( )[ ]
* Lazy Loading , 。 , if (singleton == null) , , , 。 。
public class Singleton4 {
private static Singleton4 singleton4;
private Singleton4(){}
public static synchronized Singleton4 getInstance(){
if(singleton4 == null){
singleton4 = new Singleton4();
}
return singleton4;
}
}
* ( , )[ ]
* Singleton3 , , getInstance() 。
* : , , getInstance() 。 , , return 。 。
public class Singleton5 {
private static Singleton5 singleton5;
private Singleton5(){}
public static Singleton5 getInstance(){
if(singleton5 == null){
synchronized (Singleton5.class){
singleton5 = new Singleton5();
}
}
return singleton5;
}
}
* ( , )[ ]
* Singleton4 , , 。 。 Singleton3 ,
* if (singleton == null) , , , 。
public class Singleton6 {
private static Singleton6 singleton6;
private Singleton6(){}
public static Singleton6 getInstance(){
if(singleton6 == null){
synchronized (Singleton6.class){
if (singleton6 == null){
singleton6 = new Singleton6();
}
}
}
return singleton6;
}
}
* [ ]
* Double-Check , , if (singleton == null) , 。
* , , , if (singleton == null), return 。
* : ; ; 。
3. 정적 내부 클래스
public class Singleton7 {
private Singleton7(){}
private static class SingletonGetInstance{
private static final Singleton7 singleton7 = new Singleton7();
}
public static Singleton7 getInstance(){
return SingletonGetInstance.singleton7;
}
}
* [ ]
* , 。 。 Singleton ,
* Lazy-Loading , Singleton , , getInstance , SingletonInstance , Singleton 。
* , ,JVM , , 。
* : , , 。
4. 매 거 류
public enum Singleton8 {
INSTANCE;
public void whateverMethod(){
System.out.println(" ");
}
public static void main(String[] args) {
Singleton8.INSTANCE.whateverMethod();
}
}
* @Description [ ]
* JDK1.5 。 , 。
* JDK1.5 , , 。
5. CAS (AtomicReference) 의 도움 을 받 아
public class Singleton9 {
private static final AtomicReference INSTANCE = new AtomicReference();
private Singleton9(){}
public static Singleton9 getInstance(){
for (;;){
Singleton9 singleton9 = INSTANCE.get();
if(singleton9 != null){
return singleton9;
}
singleton9 = new Singleton9();
if (INSTANCE.compareAndSet(null,singleton9)){
return singleton9;
}
}
}
}
* @Description CAS(AtomicReference)
* CAS ,CAS , , , 。
* CAS ( ), CPU 。
* CAS , CAS , , , , , 。
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.