개요: 이 문서에서 우리는 자바 스크립트에서 사용되는 다른 디자인 패턴에 대해 이야기합니다. 개발자 대부분이 프로그램에서 사용되는 실제 또는 이상적 디자인 패턴을 알 수 있을까. 솔직히, 이 질문에 대답 콘크리트 없다 또는 주어진 상황에 사용되는 적절한 디자인 패턴을 발견하는 어떤 방식이 아닌. 그래서 이러한 상황에서, 우리는 그들이 다루는 디자인 패턴 확고한 헐떡 거림 및 특정 문제를 가져야, 우리는 어떤 조건에서 사용할 수있는 디자인 패턴에 대한 결정을하기 위해 더 나은 상황에 있어야.
소개:
디자인 패턴은 소프트웨어 설계 및 개발에서 흔한 다시 발생하는 문제점에 적용 할 수있는 재사용 가능한 해결책. 템플릿 일반적인 문제를 해결하기 위해 사용되는 디자인 패턴도라고 할 수있다. 디자인 패턴은 세 가지 주요 혜택을:
- 그들은 솔루션을 입증: 디자인 패턴은 소프트웨어 개발 견고한 접근법을 제공하는 입증 된 기법을 사용.
- 쉽게 재사용 될 수있다: 디자인 패턴 개념이며, 우리의 요구에 맞는 박스 솔루션에서 제공. 이 기능은 디자인 패턴이보다 강력하게하고 유사한 조건에서 다시 사용될 수있다.
- 패턴 표현입니다: 모든 설계 패턴은 큰 문제에 대한 해결책을 제공하기 위해 사용될 수있는 미리 정의 된 구조와 용어를 제시.
디자인 패턴은 결코 문제에 대한 정확한 솔루션을 제공하지 않습니다. 패턴의 역할 용액 방식을 제공하는 것이 중요하다.
디자인 패턴의 종류
디자인 패턴은 세 개의 하위 범주는 다음으로 나눌 수있다:
- 창조적 디자인 패턴 : 이 범주에서 다음과 같은 디자인 패턴은 가을 :
- 하나씩 일어나는 것
- 건축업자
- 공장
- 추상
- 원기
- 건축업자
- 구조 디자인 패턴 : 이 범주에서 다음과 같은 디자인 패턴은 가을 :
- 장식
- 정면
- Flyweight
- 어댑터
- 프록시
- 행동 디자인 패턴 : 이 카테고리에 다음과 같은 디자인 패턴의 가을 :
- 반복자
- 방문객
- 중재인
- 관찰자
자바 스크립트 패턴:
다음 패턴은 일반적으로 자바 스크립트에서 사용되는:
- 생성자 패턴
- 모듈 패턴
- 싱글 톤 패턴
- 옵저버 패턴
- 중재자 패턴
- 프로토 타입 패턴
- 명령 패턴
- 외관 패턴
- 공장 패턴
- 데코레이터 패턴
- 플라이급 패턴
생성자 패턴:
고전적인 객체 지향 프로그래밍 개념에 따라, 생성자는 메모리에서 객체의 인스턴스를 생성하는 데 사용되는 방법의 특별한 유형. 자바 스크립트에서 객체 생성을 사용하여 수행됩니다 다음과 같은 세 가지 방법 중 하나:
Listing 1: 객체를 생성하는 자바 스크립트에 사용되는 세 가지 방법
[Code]
// 접근 1
했다 NewObject를 = {};
//접근 2
VAR NewObject를 = Object.create(제로);
//접근 3
var에 NewObject를 = 새 개체();
[/Code]
제 3 수법에있어서, 개체는 값이 전달되지 또는 설정 개체 생성자를 사용하여 만들어집니다. 새로 생성 된 객체에 값을 설정하는 여러 가지 방법이 있습니다. These are:
Listing 2: 생성자에 값을 설정하는 방법
[Code]
//접근 1
newObject.someKey = "안녕하세요"
//접근 2
NewObject를[someKey] = "안녕하세요"
//접근 3
Object.defineProperty( NewObject를, “someKey”, {
가치 : "안녕하세요" 쓰기 : 참된 열거 : 참된 구성 : 참된 ); [/Code] |
The Singleton Pattern:
우리 모두는 싱글 톤 패턴은 하나의 인스턴스 객체의 생성을 제한하는 것을 알고있다. 싱글 톤 패턴은 다른 인스턴스가 존재하지 않는 경우에만 개체의 새 인스턴스를 생성하는 방법으로 클래스를 생성하여 구현된다. 자바 스크립트에서 싱글은 글로벌 네임 스페이스에서 구현을 분리 공유 자원 네임 스페이스의 역할. 자바 스크립트에서, 싱글은 다음의 방식으로 구현:
Listing 3: 자바 스크립트에서 싱글 구현
[Code]
했다 mySingleton = (기능 () {
// 인스턴스는 싱글에 대한 참조를 저장
VAR 인스턴스;
기능 초기화() {
// 하나씩 일어나는 것
// 개인 메소드와 변수
기능 privateMethod(){
CONSOLE.LOG( “나는 개인입니다” );
}
전용 변수했다 = “개인도 임”;
VAR privateRandomNumber = 인 Math.random();
return {
// 공개 방법 및 변수
publicMethod: 기능 () {
CONSOLE.LOG( “대중은 저를 볼 수 있습니다!” );
},
publicProperty: “또한 공용입니다”,
getRandomNumber: 기능() {
privateRandomNumber를 반환;
}
};
};
return {
// 가있는 경우 싱글 톤 인스턴스를 가져옵니다
// 그렇지 않은 경우 또는 하나를 만들
의 getInstance: 기능 () {
면 ( !예 ) {
예를 = 초기화();
}
인스턴스를 반환;
}
};
})();
했다 myBadSingleton = (기능 () {
// 인스턴스는 싱글에 대한 참조를 저장
VAR 인스턴스;
기능 초기화() {
// 하나씩 일어나는 것
VAR privateRandomNumber = 인 Math.random();
return {
getRandomNumber: 기능() {
privateRandomNumber를 반환;
}
};
};
return {
// 항상 새 싱글 인스턴스를 생성
의 getInstance: 기능 () {
예를 = 초기화();
인스턴스를 반환;
}
};
})();
// 용법:
했다 single1 = mySingleton.getInstance();
했다 single2 = mySingleton.getInstance();
CONSOLE.LOG( singleA.getRandomNumber() === singleB.getRandomNumber() ); // 참된
VAR badSingle1 = myBadSingleton.getInstance();
VAR badSingle2 = myBadSingleton.getInstance();
CONSOLE.LOG( badSingleA.getRandomNumber() !== badSingleB.getRandomNumber() ); // 참된
[/Code]
GoF의 당, 싱글은 다음과 같은 상황에 적용 할 수있다:
- 개체의 인스턴스를 정확히 존재한다.
- 유일한 인스턴스를 하위 클래스라는 확장해야한다.
The Observer Pattern:
옵저버 패턴, the object (또한 주제로 호출) 그것에 따라 개체의 목록을 유지 옵서버로 언급. 주제는 자동으로 관찰자에 일어난 변화를 통지, 브로드 캐스트 메커니즘을 사용하여. 옵저버 패턴의 구현은 다음과 같습니다.
Listing 4: 피사체가있을 수 있습니다 의존 관찰자의 목록
[Code]
기능 ObserverList(){ this.observerList = [];} ObserverList.prototype.Add = 기능( OBJ ){ this.observerList.push를 반환( OBJ );}; ObserverList.prototype.Empty = 기능(){ this.observerList = [];}; ObserverList.prototype.Count = 기능(){ this.observerList.length를 반환;}; ObserverList.prototype.Get = 기능( index ){ 면( index > -1 && index < this.observerList.length ){ this.observerList를 반환[ index ]; }}; ObserverList.prototype.Insert = 기능( OBJ, index ){ 이었다 포인터 = -1; 면( 인덱스 === 0 ){ this.observerList.unshift( OBJ ); 포인터 = 인덱스; }다른 경우( 인덱스 === this.observerList.length ){ this.observerList.push( OBJ ); 포인터 = 인덱스; } 포인터를 반환;}; ObserverList.prototype.IndexOf = 기능( OBJ, 시작 인덱스 ){ var에 나는 = 시작 인덱스, 포인터 = -1; while( 나는 < this.observerList.length ){ 면( this.observerList[나는] === OBJ ){ 포인터 = 난; } 난 ; } 포인터를 반환;}; ObserverList.prototype.RemoveAt = 기능( index ){ 면( 인덱스 === 0 ){ this.observerList.shift(); }다른 경우( 인덱스 === this.observerList.length -1 ){ this.observerList.pop(); }}; // 확장 extensionfunction와 객체를 확장( extension, OBJ ){ 용 ( 확장에 var에 키 ){ OBJ[key] = 확장[key]; }}
[/Code]
Listing 5: 주제
[Code]
함수 주제(){ this.observers = 새로운 ObserverList();} Subject.prototype.AddObserver = 기능( observer ){ this.observers.Add( observer );}; Subject.prototype.RemoveObserver = 기능( observer ){ this.observers.RemoveAt( this.observers.IndexOf( observer, 0 ) );}; Subject.prototype.Notify = 기능( 문맥 ){ VAR observerCount = this.observers.Count(); 용(var에 나는 = 0; 나는 < observerCount; 난 ){ this.observers.Get(나는).최신 정보( 문맥 ); }};
[/Code]
In the above example, 옵저버 구성 요소를 사용하여, 우리는 지금 정의:
- 페이지로 새 관찰 체크 박스를 추가하는 버튼
- 대상 역할을 제어 확인란, 그들은 확인해야 다른 확인란을 통지
- 새로운 체크 박스의 컨테이너가 추가되는
HTML 코드는 아래에로이다
Listing 5: HTML 코드
[Code]
<버튼 식”addNewObserver”>새 관찰자의 체크 박스를 추가</button><입력 한 id =”mainCheckbox” 유형 =”확인란”/><사업부 아이디 =”observersContainer”></div>
[/Code]
Summary: 그래서이 글에서 나는 자바 스크립트 디자인 패턴에 대한 세부 사항을 논의했다. 디자인 패턴은 객체 지향 언어 자바와 같은 언어의 모든 유형에 적용 할 수 있고 자바 스크립트와 같은 언어를 스크립팅. 그러나이 차이이며, 우리는 위의 예에서 그것을 보았다. 그래서 우리는 디자인 패턴이 일반적으로 문제가 발생하는 솔루션을 제공하는 데 사용됩니다 말할 수있는 논의를 결론. 그리고 디자인 패턴이라는 것을 명심하시기 바랍니다
- 솔루션을 입증
- 쉽게 사용할 수 있습니다
- 표현입니까
당신이 개념을 이해 희망 그것은 당신이 당신의 자신의 프로젝트에서 그것을 구현하는 데 도움이됩니다. 행복한 독서.
JS에 더 재미있는 기사 — 당신은 읽을 수 있어야합니다