디자인 모드 - 단일 모드 (singleton pattern) 상세 설명
본문 주소: http://blog.csdn.net/caroline_wendy/article/details/28595349
단일 모드 (singleton pattern): 하나의 인 스 턴 스 만 있 는 지 확인 하고 전체 액세스 점 을 제공 합 니 다.
단가 모델 은 세 가지 부분 을 포함한다. 사유 구조 기, 정적 변수, 정적 방법 이다.
구체 적 인 방법:
1. 표준 단일 모드:
/**
* @time 2014.6.5
*/
package singleton;
/**
* @author C.L.Wang
*
*/
public class Singleton {
private static Singleton uniqueInstance; //
private Singleton() {} //
public static Singleton getInstance() { //
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
2. 다 중 스 레 드 를 고려 하 는 세 가지 방법:
동기 화 (synchronized) 방법, "synchronized" 추가, 성능 이 떨 어 질 수 있 습 니 다. 예 시 를 호출 할 때마다 동기 화 되 어야 하지만 사용 은 간단 합 니 다.
/**
* @time 2014.6.5
*/
package singleton;
/**
* @author C.L.Wang
*
*/
public class Singleton {
private static Singleton uniqueInstance; //
private Singleton() {} //
public static synchronized Singleton getInstance() { //
if (uniqueInstance == null)
uniqueInstance = new Singleton();
return uniqueInstance;
}
}
절박 (eagerly) 방법 은 시작 할 때 인 스 턴 스 를 만 들 고 필요 하지 않 을 때 인 스 턴 스 공간 을 차지 합 니 다. 즉, 공간 을 너무 오래 차지 합 니 다.
/**
* @time 2014.6.5
*/
package singleton;
/**
* @author C.L.Wang
*
*/
public class Singleton {
private static Singleton uniqueInstance = new Singleton(); //
private Singleton() {} //
public static synchronized Singleton getInstance() { //
//if (uniqueInstance == null)
//uniqueInstance = new Singleton();
return uniqueInstance;
}
}
이중 검사 잠 금 (double - checked locking) 방법 은 "volatile" 과 "synchronized (Singleton. class)" 를 사용 하여 시간 소 모 를 줄 이 고 자바 1.4 이상 버 전에 적용 합 니 다.
/**
* @time 2014.6.5
*/
package singleton;
/**
* @author C.L.Wang
*
*/
public class Singleton {
private volatile static Singleton uniqueInstance; //
private Singleton() {} //
public static synchronized Singleton getInstance() { //
if (uniqueInstance == null) {
synchronized (Singleton.class) {
if (uniqueInstance == null)
uniqueInstance = new Singleton();
}
}
return uniqueInstance;
}
}
3. 단일 모드 를 사용 하 는 예:
코드:
/**
* @time 2014.6.5
*/
package singleton;
/**
* @author C.L.Wang
*
*/
public class ChocolateBoiler { //
private boolean empty;
private boolean boiled;
public static ChocolateBoiler uniqueInstance; //
private ChocolateBoiler() { //
empty = true;
boiled = false;
}
public static ChocolateBoiler getInstance() { //
if (uniqueInstance == null)
uniqueInstance = new ChocolateBoiler();
return uniqueInstance;
}
public void fill() { //
if (isEmpty()) {
empty = false;
boiled = false;
}
}
public void drain() { //
if (!isEmpty() && isBoiled())
empty = true;
}
public void boil() { //
if (!isEmpty() && !isBoiled()) {
boiled = true;
}
}
public boolean isEmpty() {
return empty;
}
public boolean isBoiled() {
return boiled;
}
}
4. 매 거 진 단일 (enum singleton) 모드 도 스 레 드 안전 을 확보 할 수 있 습 니 다.
코드:
/**
* @time 2014.6.5
*/
package singleton;
/**
* @author C.L.Wang
*
*/
public class EnumSingleton {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
eSingleton d1 = eSingleton.INSTANCE;
d1.setName("Spike");
eSingleton d2 = eSingleton.INSTANCE;
d2.setName("Caroline");
System.out.println(d1);
System.out.println(d2);
System.out.println(d1 == d2);
}
}
enum eSingleton {
INSTANCE;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "[" + name + "]";
}
}
출력:
[Caroline]
[Caroline]
true
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Web Design The Missing Link】Appendix: Other Approaches to Representing Links우리가 알고 있는 JSON의 링크를 나타내는 다음 가장 간단한 방법은 다음과 같다. 이 모드의 장점은 - 이 모드만 알면 - 외부 정보를 포함하지 않고 URL 값을 가진 모든 속성을 찾을 수 있다는 것입니다.또한 추...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.