타성 실례 화

3888 단어 실례
타성 실례 화 를 이야기 하기 전에 먼저 '단일 모드' 가 무엇 인지 공유 해 볼 까요?
     '단일 모드' (singleton) 는 자바 스 크 립 트 에서 가장 기본 적 이지 만 가장 유용 한 모델 중 하나 로 다른 어떤 모델 보다 도 자주 사용 할 수 있 습 니 다.이 모드 는 코드 를 논리 단위 로 구성 하 는 수단 을 제공 합 니 다. 이 논리 단위 의 코드 는 단일 한 변 수 를 통 해 접근 할 수 있 습 니 다.단일 대상 에 하나의 인 스 턴 스 만 존재 하 는 지 확인 함으로써 모든 코드 가 같은 전역 자원 을 사용 하고 있다 는 것 을 확신 할 수 있 습 니 다.
     단일 클래스 는 자 바스 크 립 트 에서 많은 용도 가 있다.웹 페이지 의 전체 변 수 를 줄 이기 위해 네 임 스페이스 를 구분 할 수 있 습 니 다.브 라 우 저 간 의 차 이 를 차단 하기 위해 분기 (branching) 라 는 기술 도 사용 할 수 있다.더 중요 한 것 은 단일 모드 를 통 해 코드 를 더욱 일치 하 게 구성 하여 쉽게 읽 고 유지 할 수 있다 는 것 이다.이 모델 은 자바 스 크 립 트 에서 다른 어떤 언어 보다 도 중요 할 수 있 습 니 다.웹 페이지 에서 전역 변 수 를 사용 하 는 것 은 매우 큰 위험 이 있 으 며, 단일 대상 으로 만 든 네 임 스페이스 는 이러한 전역 변 수 를 제거 하 는 가장 좋 은 수단 중 하나 이다.
     단일 모드 의 기본 구조:
/* Basic Singleton */



var Singleton = {

    attribute1 : true,

    attribute2 : 10,



    method1 : function(){},

    method2 : function(){}

}

     이런 단일 모델 은 수정 할 수 있다.새 멤버 를 추가 할 수 있다 는 점 은 다른 대상 의 글자 수 와 다 르 지 않다.delete 연산 자 를 사용 하여 기 존 구성원 을 삭제 할 수도 있 습 니 다.
     이제 본론 으로 들 어가 제목 에서 언급 한 '타성 실례 화' 를 말 해 보 자.단일 모드 의 다양한 실현 방식 은 하나의 공통점 이 있 습 니 다. 단일 대상 은 스 크 립 트 를 불 러 올 때 만들어 집 니 다.자원 집약 형 이나 배치 비용 이 많이 드 는 단량체 에 대해 서 는 더욱 합 리 적 인 방법 은 사례 화 를 사용 해 야 할 때 로 미 루 는 것 일 수 있다.이 기술 은 '타성 로드' (lazy loading) 라 고 불 리 며, 마스터 데 이 터 를 불 러 와 야 하 는 개체 에 가장 많이 사용 된다.
     이러한 타성 로드 단량체 의 특별한 점 은 그들의 방문 은 반드시 정적 인 방법 을 빌려 야 한 다 는 것 이다.이렇게 호출 해 야 합 니 다: Singleton. getInstance (). methodName (). 이렇게 호출 하 는 것 이 아 닙 니 다: Singleton. methodName ().getInstance 방법 은 이 개체 가 실례 화 되 었 는 지 확인 합 니 다.아직 없 으 면 인 스 턴 스 를 만 들 고 되 돌려 줍 니 다. 단일 가 예화 되 었 다 면 기 존 인 스 턴 스 를 되 돌려 줍 니 다.
     어떻게 일반 단 체 를 타성 로드 단량체 로 바 꿉 니까?다음은 예 시 를 살 펴 보 자.
     일반 개체:
/* Singleton with Private Members */



MyNamespace.Singleton = (function(){

	// Private members

	var privateAttribute1 = false;

	var privateAttribute2 = [1, 2, 3];



	function privateMethod1(){}

	function privateMethod2(){}



	return{	// Public members

		publicAttribute1 : true,

		publicAttribute2 : 10,



		publicMethod1 : function(){},

		publicMethod2 : function(){}

	}

})();

      이 코드 는 아직 아무런 수정 도 진행 되 지 않 았 다.작업 을 바 꾸 는 첫 번 째 단 계 는 개체 의 모든 코드 를 constructor 라 는 방법 으로 옮 기 는 것 입 니 다.
/*        */



MyNamespace.Singleton = (function(){

	function constructor(){	//                  

		// Private members

		var privateAttribute1 = false;

		var privateAttribute2 = [1, 2, 3];



		function privateMethod1(){};

		function privateMethod2(){};



		return{	// Public members

			publicAttribute1 : true,

			publicAttribute2 : 10,



			publicMethod1 : function(){},

			publicMethod2 : function(){}

		}

	};

})();

       이 방법 은 폐쇄 적 인 외부 에서 방문 할 수 없 는 것 이다. 이것 은 좋 은 일이 다. 왜냐하면 우 리 는 호출 시 기 를 통제 하고 싶 기 때문이다.공용 방법 getInstance 는 이러한 통 제 를 실현 하 는 데 쓰 인 다.공용 방법 으로 만 들 기 위해 서 는 대상 의 글자 수 에 넣 고 대상 으로 돌아 가면 된다.
/*          ,      getInstance */



MyNamespace.Singleton = (function(){

	function constructor(){

		//            

	}



	retutn{

		getInstance : function(){

			//         

		}

	}

})();

      단일 클래스 의 실례 화 시 기 를 실현 하려 면 두 가지 일 을 해 야 한다.첫째, 이 종류 가 이미 실례 화 되 었 는 지 알 아야 한다.둘째, 이 클래스 가 이미 실례 화 되 었 다 면, 이 실례 를 되 돌 릴 수 있 도록 실례 의 상황 입 니 다.
MyNamespace.Singleton = (function(){

	var uniqueInstance;	//     ,              



	function constructor(){

		//            

	}



	retutn{

		getInstance : function(){

			if(!uniqueInstance){

				uniqueInstance = constructor();

			}

			return uniqueInstance;

		}

	}

})();

        하나의 단량체 가 타성 로드 단량체 로 바 뀌 면 호출 코드 를 다시 수정 해 야 합 니 다.
        원래 일반 단일 호출 방법: MyNamespace. singleton. publicMethod 1 ();
        불활성 로드 호출 방법: MyNamespace. singleton. getInstance (). publicMethod 1 ();
        타성 로드 단량체 의 단점 중 하 나 는 복잡성 이다.

좋은 웹페이지 즐겨찾기