소개
생성 패턴과 유사하게 팩토리 패턴은 생성할 객체의 특정 클래스를 지정하지 않고 객체(공장에서 제품으로 간주)를 생성합니다.
팩토리 패턴은 객체 생성을 위한 인터페이스를 정의합니다. 이 인터페이스는 하위 클래스에서 인스턴스화할 클래스를 결정합니다. 이 패턴은 클래스의 인스턴스화를 하위 클래스로 연기합니다. 서브클래스는 인터페이스 메서드를 재정의하여 생성 시 자체 객체 유형을 지정할 수 있습니다.
이 모드는 특히 많은 설정 파일에 의존하는 등 개체 생성 과정에 값을 할당할 때 매우 유용합니다. 더욱이, 프로그램에서 서브클래스가 생성되어야 하는 객체의 유형을 정의하도록 하는 데 사용되는 팩토리 메소드를 종종 볼 수 있습니다.
텍스트
다음 예제는 팩토리 메소드를 적용하는 26장의 생성자 패턴 코드를 개선한 버전입니다.
var tom = new Car("Tom", 2009, 20000);
var dudu = new Car("Dudu", 2010, 5000);
이해하기 어렵다면 다른 예를 들어보겠습니다.
productManager.createProductA = 함수() {
console.log('ProductA');
}
productManager.createProductB = 함수() {
console.log('제품B');
}
productManager.factory = 함수(typeType) {
새 productManager[typeType] 반환;
}
productManager.factory("createProductA");
아직 이해가 되지 않는다면 웹 페이지에 일부 요소를 삽입하려고 하는데 이러한 요소의 유형이 그림, 링크 또는 텍스트일 수 있다고 가정해 보겠습니다. 팩토리 패턴을 정의하려면 먼저 팩토리 클래스와 해당 하위 클래스를 정의해야 합니다. 먼저 하위 클래스(즉, 하위 함수)의 특정 구현을 정의하겠습니다.
This.insert = 함수(여기서) {
var link = document.createElement('a');
link.href = this.url;
link.appendChild(document.createTextNode(this.url));
Where.appendChild(링크);
};
};
//하위 기능 3: 사진 처리
This.insert = 함수(여기서) {
var im = document.createElement('img');
im.src = this.url;
Where.appendChild(im);
};
};
요약
팩토리 패턴을 사용하는 경우
공장 모드는 다음과 같은 시나리오에서 특히 유용합니다.
1. 객체 구성이 매우 복잡합니다
2. 특정 환경에 따라 다양한 인스턴스를 생성해야 합니다
3. 동일한 속성을 가진 다수의 작은 물체를 처리
공장 모드를 사용하지 않을 때
팩토리 패턴을 남용하지 마세요. 때로는 코드에 불필요한 복잡성만 추가하고 테스트 실행을 어렵게 만들기도 합니다.