11일차 단일 모드

1960 단어

무엇


하나의 클래스는 대상의 인용 (영원히 동일) 과 이 실례를 얻을 수 있는 방법 (정적 방법static이어야 하며, 보통 getInstance라는 이름을 사용합니다) 을 되돌려줍니다.우리가 이 방법을 호출할 때, 클래스가 가지고 있는 인용이 비어 있지 않으면 이 인용을 되돌려주고, 클래스가 유지하고 있는 인용이 비어 있으면 클래스의 실례를 만들고, 실례의 인용을 클래스가 유지하고 있는 인용에 부여한다.또한 우리는 이 클래스의 구조 방법을 사유 방법으로 정의하여 다른 곳의 코드는 이 클래스의 구조 함수를 호출하여 이 클래스의 대상을 실례화할 수 없고, 이 클래스가 제공하는 정적 방법을 통해서만 이 클래스의 유일한 실례를 얻을 수 있다.

2. 단례 특징

어떤 종류는 하나의 실례만 있을 수 있다
이것은 반드시 스스로 이 실례를 만들어야 한다
그것은 반드시 자체적으로 전체 시스템에 이 실례를 제공해야 한다
두 가지 실현 방식: 굶주림식과 게으름뱅이식
 
 

3. Java는 단일한 특징을 실현한다.

구조기는 사유이기 때문에 종류는 상속될 수 없다.(단일 클래스 요점 제1조: 어떤 클래스는 하나의 실례만 있을 수 있다)
모두 일례류를 호출하는 방법을 통해 일례류의 대상을 얻고 어떻게 일례화를 일례류가 조작하는지(일례류의 요점에 부합되는 제2조: 이 사례는 전체 시스템에 자체적으로 제공해야 한다)
 

4. 두 가지 실현 방식이 있다.


게으름뱅이
/*           */
public final class LazySingleton{
	
	private static LazySingleton mInstance = null;

	private LazySingleton() {}  //  , 
	
	/**
	 *  , 
	 */
	public synchronized static LazySingleton getInstance(){
		if (mInstance == null){
			mInstance = new LazySingleton();
		}
		return mInstance;
	}
}

게으름뱅이
게으름뱅이식 단일 사례류는 실례화할 때 여러 라인이 동시에 처음으로 이런 것을 인용할 때의 접근 제한 문제를 잘 처리해야 한다. 특히 단일 사례류가 자원 컨트롤러로서 실례화할 때 자원 초기화와 관련되어야 하기 때문에 자원 초기화는 시간이 걸릴 가능성이 높다.이는 다선정이 동시에 처음으로 이런 것을 인용할 확률이 커졌다는 것을 의미한다.
아사자식:
/*         

1. 
2.     m_instance() , 
3. 
*/

public class EagerSingleton{
	private static final EagerSingleton mInstance = new EagerSingleton();


	private EagerSingleton() {}   //  , 

	/*
	*  
	*/
	public static EagerSingleton getInstance(){
		return mInstance;
	}
}

5. 굶주린 사람과 게으른 사람의 차이

1. 자원 활용 측면
아사자식은 구조기가 클래스만 불러오면 실례화되기 때문이다.게으름뱅이식보다 못하다.
 
2. 속도와 반응 시간
굶주린 사람이 게으른 사람보다 낫다
 
단례류 요점 제2조: 스스로 이 사례를 만들어야 한다
자신이 불러올 때 자신을 실례화한다.(static final )
클래스 방법이 호출되었을 때 초기화됩니다 (static가 되돌아올 때 초기화되지 않았는지 판단합니다)
2014-01-31

좋은 웹페이지 즐겨찾기