이 글을 읽기 전에 'JavaScript 디자인 패턴의 싱글턴 모드' 글을 먼저 읽어보시길 추천드립니다. 결국 개인적으로 차근차근 진행하는 것이 더 좋다고 생각합니다.
팩토리 패턴은 단순 팩토리 패턴과 복합 팩토리 패턴으로 구분되며, 전자는 클래스를 사용하여 인스턴스를 생성하며, 후자는 하위 클래스를 사용하여 멤버 변수가 특정 인스턴스인지 확인합니다. 공장에는 복잡한 공장이 포함되어 있습니다.
구체적인 예를 통해 이 공장에 대해 자세히 이야기해 보겠습니다.
Ajax 기술을 사용하여 비동기 요청을 시작하는 것은 오늘날 웹 개발에서 일반적인 작업입니다.
1 //AjaxHandler를 구현하고 두 개의 간단한 팩토리를 포함하는 일련의 Ajax 프로세스를 실행하는 복잡한 팩토리를 생성합니다.
2 var SimpleHandler = function(){};
3
4 SimpleHandler.prototype = {
5 //첫 번째 단순 팩토리는 Ajax 생성, 요청 및 전송을 수행합니다. . . 기다리다
6 요청:함수(메소드, URL, 콜백, postVars){
7 var xhr = this.createXhrObject();
8 xhr.onreadystatechange = 함수(){
9 if(xhr.readyState != 4) 반환;
10(xhr.status == 200) ?
11 //반환 매개변수 적용을 수행하기 위해 전역 객체 콜백이 정의되었습니다.
12 콜백.성공(xhr.responseText,xhr.responseXML):
13 콜백.실패(xhr.status);
14};
15 xhr.open(메서드,url,true);
16 if(method != "POST") postVars = null;
17 xhr.send(postVars);
18},
19 //두 번째 단순 팩토리는 상황에 따라 XHR 객체를 생성합니다. 상황에 관계없이 올바른 XHR 객체를 반환할 수 있습니다.
20 createXhrObject:함수(){
21 var 메소드 = [
22 함수(){새 XMLHttpRequest() 반환;},
23 함수(){새 ActiveXObject('Msxml2.XMLHttp') 반환;},
24 function(){return new ActiveXObject('Microsoft.XMLHttp');}
25];
26 for(var i = 0; i < 3; i++){
27 시도{
28개의 메소드[i]();
29 }잡기(e){
30 계속;
31}
32 this.createXhrObject = 메소드[i]();
33개의 반환 메서드[i]();
34}
35 throw new Error("Error!");
36}
37 }
38
이를 보면 팩토리 패턴은 일반적으로 단일 패턴을 더욱 확장하고 적용한 것입니다. 위의 예는 다음과 같이 호출할 수 있습니다.
1 window.onload = 함수(){
2 var myHandler = new SimpleHandler();
3 var 콜백 = {
4 성공:함수(responseText,responseXML){alert("성공:" + responseXML);},
5 실패:함수(statusCode){alert("실패" + statusCode);}
6};
7 myHandler.request('GET','innerHTML.xml',callback);
8
9 };//물론 상황에 따라 콜백이 달라질 수 있습니다.
new 키워드와 구체적인 클래스를 사용하는 대신 팩토리 패턴을 사용하면 모든 인스턴스 코드를 한 위치에 중앙 집중화할 수 있습니다.
팩토리 패턴을 사용하면 먼저 추상 상위 클래스를 만든 다음 하위 클래스에 팩토리 메서드를 만들 수 있습니다. 이를 통해 멤버 개체의 인스턴스화를 보다 특수화된 하위 클래스로 연기하여 코드 중복을 효과적으로 방지할 수 있습니다.