타성 실례 화
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 ();
타성 로드 단량체 의 단점 중 하 나 는 복잡성 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 개체 변환 맵통일 처리 류 의 입구 에서 모든 뒤의 처리 절차 에 필요 한 수 치 를 문맥 의 MAP 대상 에 통일 시 켜 야 합 니 다. 그 중에서 지속 적 인 DO 대상 을 포함 합 니 다.만약 에 대상 을 하나하나 옮 겨 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.