웹 전단 개발 자 바스 크 립 트 디자인 모델 - 단일 모델 (The Singleton Pattern)

7168 단어 JavaScript
앞에서 말 했 듯 이 웹 전단 프로젝트 의 개발 에서 코드 를 작성 하 는 구조 가 뚜렷 하고 읽 기 쉬 우 며 유지 하기 쉬 우 며 안전 등 분야 의 중요성 을 실현 하 는 것 은 자명 하 다.코드 작성 을 잘 하기 위해 디자인 모델 중의 관련 프로 그래 밍 사상 을 참고 하 는 것 이 도움 이 됩 니 다. 다음은 간단 하고 사용 하기 쉬 운 프로 그래 밍 디자인 모델 을 소개 하고 여러분 들 이 프로젝트 개발 에 도움 이 되 기 를 바 랍 니 다.소개 중의 코드 예 시 는 주로 JavaScript 코드 로 작 성 된 것 으로 논술 한 디자인 사상 은 다른 프로 그래 밍 언어 에서 대부분 통용 된다.
레 퍼 런 스
1. Pro javascript design patterns / javascript 디자인 모델 (Ross Harmes and Dustin Diaz) 2. Design Patterns: Elements of Reusable Object - Oriented Software / 디자인 모델 은 대상 소프트웨어 를 위 한 기초 ([미] Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides) 본문 단일 모델 (The Singleton Pattern) 을 재 활용 할 수 있 습 니 다.
단일 모드 는 자 바스 크 립 트 에서 가장 기본적으로 자주 사용 하 는 모드 중의 하나 이다.코드 를 논리 단위 (대상) 로 구성 한 다음 단일 변수 (대상 이름) 를 통 해 접근 하 는 방식 을 제공 합 니 다.
1. 단일 모드 의 주요 용도:
(1). 코드 에 네 임 스페이스 를 구분 하고 전체 변수의 수량 을 줄 이 며 코드 안전성 을 향상 시킨다.(2). 코드 지연 로드 (lazy loading);(3). 코드 선택 적 호출 (branching);(4)... 2. 단일 모델 기본 구조 2.1 구조
/* Basic Singleton. */
var Singleton = {
	attribute1: true,
	attribute2: 10,
	method1: function() {
	},
	method2: function(arg) {
	}
	// Other methods can go here as well.
};

2.2 접근 방법
Singleton.attribute1 = false;
var total = Singleton.attribute2 + 5;
var result = Singleton.method1();

3. 네 임 스페이스 구분
var MyNamespace = {
	findProduct: function(id) {
	...
},
// Other methods can go here as well.
}

네 임 스페이스 는 전역 변수의 수 를 줄 이 고 코드 안전성 을 높 일 수 있 습 니 다.
4. 사유 멤버 가 있 는 개체
4.1 개인 구성원 의 밑줄 표시 방법
/* DataParser singleton, converts character delimited strings into arrays. */
GiantCorp.DataParser = {
	// Private methods.
	_stripWhitespace: function(str) {
		return str.replace(/\s+/, '');
	},
	_stringSplit: function(str, delimiter) {
		return str.split(delimiter);
	},
	// Public method.
	stringToArray: function(str, delimiter, stripWS) {
		if(stripWS) {
		str = this._stripWhitespace(str);
	}
	var outputArray = this._stringSplit(str, delimiter);
		return outputArray;
	}
};

밑줄 친 것 은 개체 대상 내 에서 개인 구성원 이 비교적 간단 하 다 는 것 을 나타 내 는 방법 으로 이 구성원 이 개인 적 이 고 대상 내부 에서 만 사용 된다 는 것 을 나타 낸다.위의 예제 에서 키워드 this 를 GiantCorp. Data Parser 로 바 꾸 는 것 은 대부분 상황 에서 더욱 안전 하 다.
밑줄 친 개인 구성원 은 법 구조 가 간단 하고 뚜렷 하지만 개인 구성원 은 이 대상 의 개인 이 아니 라 외부 에서 도 방문 할 수 있다 (GiantCorp. Data Parser. stripWhitespace (str).).
4.2 개인 구성원 은 패키지 로 포장
4.2.1 폐쇄 적 인 간단 한 구조
MyNamespace.Singleton = function() {
	return {};
}();
//or
MyNamespace.Singleton = (function() {
	return {};
})();

상기 두 코드 예제 에서 만 든 MyNamespace. singleton 은 같 습 니 다. 그 중의 익명 함 수 는 하나의 대상 에 게 MyNamespace. singleton 을 부여 합 니 다.정 의 된 괄호 한 쌍 은 이 익명 함 수 를 즉시 실행 시 킵 니 다.
4.2.2 공용 구성원 을 return {} 에 추가 하여 개체 에 다시 넣 습 니 다:
MyNamespace.Singleton = (function() {
	return { // Public members.
		publicAttribute1: true,
		publicAttribute2: 10,
		publicMethod1: function() {
			...
		},		
		publicMethod2: function(args) {
			...
		}
	};
})();

4.2.3 개인 구성원 추가:
MyNamespace.Singleton = (function() {
	// Private members.
	var privateAttribute1 = false;
	var privateAttribute2 = [1, 2, 3];
	function privateMethod1() {
		...
	}
	function privateMethod2(args) {
		...
	}
	return { // Public members.
		publicAttribute1: true,
		publicAttribute2: 10,
		publicMethod1: function() {
			...
		},
		publicMethod2: function(args) {
			...
		}
	};
})();

개인 구성원 은 익명 함수 에 추 가 됩 니 다 (return {} 외). 여기에 추 가 된 개인 구성원 은 진정한 개인 구성원 입 니 다. 익명 함수 와 return 이 돌아 오 는 대상 에서 만 접근 할 수 있 습 니 다.
이러한 단일 모드 는 모듈 모드 (module pattern) 라 고도 부 르 는데 관련 방법 과 속성 을 모듈 로 구성 할 수 있 고 네 임 스페이스 를 구분 하 는 역할 도 한다.
개인 구성원 이 패 키 지 를 사용 하 는 장점: 개인 구성원 이 패 키 지 를 닫 는 데 넣 으 면 개체 밖에서 인용 되 지 않 고 대상 의 실현 디 테 일 을 바 꾸 면 다른 사람의 코드 에 영향 을 주지 않 는 다 는 것 을 확보 할 수 있다.
4.2.4 개인 구성원 이 패 키 지 를 사용 할 때 단일 한 공공 구성원 과 개인 구성원 의 성명 문법 이 다르다.
(1). 공공 구성원 은 대상 내부 에 놓 고 외부 에 사유 한다 고 성명 한다.
(2). 개인 속성 은 var 로 설명 해 야 합 니 다. 그렇지 않 으 면 전체 적 인 것 이 될 것 입 니 다.
(3). 개인 적 인 방법 은 function funName (args) {...} 방식 으로 설명 합 니 다. 마지막 큰 괄호 뒤에 분 호 를 사용 하지 않 아 도 됩 니 다.
(4). 공공 속성 과 방법 은 attributeName: attributeValue, methodName: function (args) {...} 에 따라 구성원 간 에 쉼표 로 구 분 됩 니 다.
5. 지연 실례 화 (Lazy Instantiation)
이 방법 은 자원 집약 형 이나 비용 이 많이 드 는 단량체 에 적용 되 며, 사용 이 필요 할 때 다시 사례 화 (lazy loading) 한다.
5.1 지연 실례 화 코드 구조 방법
4.2.3 코드 를 예 로 들 면 구조 전 코드:
MyNamespace.Singleton = (function() {
	// Private members.
	var privateAttribute1 = false;
	var privateAttribute2 = [1, 2, 3];
	function privateMethod1() {
		...
	}
	function privateMethod2(args) {
		...
	}
	return { // Public members.
		publicAttribute1: true,
		publicAttribute2: 10,
		publicMethod1: function() {
			...
		},
		publicMethod2: function(args) {
			...
		}
	};
})();

STEP 1: 모든 코드 를 constructor 라 는 방법 에 넣 습 니 다.
/* General skeleton for a lazy loading singleton, step 1. */
MyNamespace.Singleton = (function() {
	function constructor() { // All of the normal singleton code goes here.
		// Private members.
		var privateAttribute1 = false;
		var privateAttribute2 = [1, 2, 3];
		function privateMethod1() {
			...
		}
		function privateMethod2(args) {
			...
		}
		return { // Public members.
			publicAttribute1: true,
			publicAttribute2: 10,
			publicMethod1: function() {
				...
			},
			publicMethod2: function(args) {
				...
			}
		}
	}
})();

STEP 2: getInstance 방법 을 되 돌려 서 constructor () 의 로 딩 을 제어 합 니 다.
/* General skeleton for a lazy loading singleton, step 2. */
MyNamespace.Singleton = (function() {	
	function constructor() { // All of the normal singleton code goes here.
		...
	}
	return {
		getInstance: function() {
		// Control code goes here.
		}
	}
})();

단계 3: getInstance 제어 실례 화
/* General skeleton for a lazy loading singleton, step 3. */
MyNamespace.Singleton = (function() {
	var uniqueInstance; // Private attribute that holds the single instance.
	function constructor() { // All of the normal singleton code goes here.
		...
	}
	return {
		getInstance: function() {
			if(!uniqueInstance) { // Instantiate only if the instance doesn't exist.
				uniqueInstance = constructor();
			}
			return uniqueInstance;
		}
	}
})();

5.2 로드 지연 단일 호출 방법
MyNamespace.Singleton.getInstance().publicMethod1();

6. 분기 (분기)
주로 상황 에 따라 단일 체 로 다른 대상 을 되 돌려 주 는 데 쓰 인 다.
6.1 분기 단순 구조
/* Branching Singleton (skeleton). */
MyNamespace.Singleton = (function() {
	var objectA = {
		method1: function() {
			...
		},
		method2: function() {
			...
		}
	};
	var objectB = {
		method1: function() {
			...
		},
		method2: function() {
			...
		}
	};
	return (someCondition) ? objectA : objectB;
})();

분기 기술 은 코드 가 불필요 하 므 로 사용 할 때 시간 과 메모리 의 저울질 을 고려 해 야 한다.
7. 단일 모드 소결
단일 모드 는 가장 자주 사용 하 는 디자인 모델 중 하나 입 니 다. 특히 자바 스 크 립 트 프로 그래 밍 에서 그 장점 은 앞에서 간단하게 소개 되 었 습 니 다. 부족 한 점 은 모듈 간 의 강 한 결합 을 초래 하여 유닛 테스트 에 불리 할 수 있 습 니 다.실제 응용 에서 단일 모델 은 다른 디자인 모델 과 결합 하여 사용 할 수 있다.서로 다른 디자인 모델 은 자신의 장점 을 가지 고 서로 다른 구체 적 인 환경 과 수요 에서 가장 적합 한 것 을 선택 할 수 있다.

좋은 웹페이지 즐겨찾기