Factory Method Design Pattern (한국어)
Intent
- 객체 생성을위한 인터페이스를 정의하되 인스턴스화 할 클래스를 하위 클래스가 결정하도록합니다. 팩토리 메서드를 사용하면 클래스가 하위 클래스로 인스턴스를 연기 할 수 있습니다.
- “가상”생성자 정의
-
new
연산자는 유해한 것으로 간주됩니다.
문제
프레임 워크는 다양한 애플리케이션에 대한 아키텍처 모델을 표준화해야하지만 개별 애플리케이션이 자체 도메인 개체를 정의하고 인스턴스화를 제공 할 수 있도록 허용해야합니다.
토론
Factory Method는 Template Method가 알고리즘을 구현하기 위해 객체를 생성하는 것입니다. 수퍼 클래스는 모든 표준 및 일반 동작 (생성 단계에 대한 순수 가상 “자리 표시 자”사용)을 지정한 다음 생성 세부 정보를 클라이언트가 제공하는 하위 클래스에 위임합니다.
Factory Method는 디자인을보다 사용자 정의 할 수있게 만들고 아주 조금만 만듭니다. 더 복잡한. 다른 디자인 패턴에는 새로운 클래스가 필요하지만 Factory Method는 새로운 작업 만 필요합니다.
사람들은 객체를 만드는 표준 방법으로 Factory Method를 자주 사용하지만 다음과 같은 경우에는 필요하지 않습니다. 인스턴스화되지 않은 클래스 변경 또는 인스턴스화는 하위 클래스가 쉽게 재정의 할 수있는 작업 (예 : 초기화 작업)에서 발생합니다.
Factory Method는 Abstract Factory와 유사하지만 강조 제품군이 없습니다.
Factory Methods 아키텍처 프레임 워크에 의해 일상적으로 지정되고 프레임 워크 사용자가 구현합니다.
구조
The Gang of Four (아래)에서 논의 된 Factory Method의 구현은 Abstract Factory의 것입니다. 이러한 이유로이 장의 프레젠테이션은 그 이후로 인기를 얻은 접근 방식에 초점을 맞추고 있습니다.
점점 더 인기있는 공장 정의 메소드는 해당 클래스의 객체를 반환하는 클래스의 static
메소드 “유형입니다. 그러나 생성자와 달리 반환하는 실제 객체는 하위 클래스의 인스턴스 일 수 있습니다. 생성자와 달리 생성 된 새 객체 대신 기존 객체를 재사용 할 수 있습니다. 생성자와 달리 팩토리 메소드는 더 설명적인 이름 (예 : Color.make_RGB_color(float red, float green, float blue)
및 Color.make_HSB_color(float hue, float saturation, float brightness)
클라이언트는 파생 클래스의 구현 세부 사항에서 완전히 분리되어 이제 다형성 생성이 가능합니다.
예
Factory Method는 객체 생성을위한 인터페이스를 정의하지만 하위 클래스에서 인스턴스화 할 클래스를 결정할 수 있습니다. 이 패턴. 플라스틱 장난감 제조업체는 플라스틱 성형 분말을 가공하여 원하는 모양의 금형에 플라스틱을 주입합니다. 장난감 등급 (자동차, 액션 피규어 등)은 금형에 의해 결정됩니다.
체크리스트
- 다형성을 실행하는 상속 계층이있는 경우 기본 클래스에
static
팩토리 메서드를 정의하여 다형성 생성 기능을 추가하는 것을 고려하세요. - 팩토리 메소드에 대한 인수를 설계하십시오. 인스턴스화 할 올바른 파생 클래스를 식별하는 데 필요한 품질 또는 특성은 무엇입니까?
- 객체를 처음부터 만드는 대신 재사용 할 수있는 내부 “객체 풀”을 설계하는 것이 좋습니다.
- 고려 모든 생성자
private
또는protected
.
경험 규칙
- Abstract Factory 클래스는 종종 Factory 메서드로 구현되지만 Prototype을 사용하여 구현할 수 있습니다.
- Factory 메서드는 일반적으로 템플릿 메서드 내에서 호출됩니다.
- Factory 메서드 : 상속을 통한 생성 . 프로토 타입 : 위임을 통한 생성.
- 종종 디자인은 Factory Method를 사용하여 시작하고 (덜 복잡하고, 사용자 정의가 가능하며, 하위 클래스가 확산 됨) AbstractFactory, Prototype 또는 Builder (더 유연하고 더 복잡함)로 진화합니다. 유연성이 필요합니다.
- 프로토 타입은 서브 클래 싱이 필요하지 않지만 초기화 작업이 필요합니다. 팩토리 메서드에는 서브 클래 싱이 필요하지만 초기화를 “요구하지 않습니다.
- 팩토리 메서드의 장점은 다음과 같습니다. 동일한 인스턴스를 여러 번 반환하거나 정확한 유형의 객체가 아닌 하위 클래스를 반환 할 수 있습니다.
- 일부 Factory Method 옹호자들은 언어 디자인의 문제 (또는 스타일 문제로 실패)를 권장합니다. ) 절대적으로 모든 생성자는 비공개이거나 보호되어야합니다. 학급이 새로운 물건을 제조하든 오래된 물건을 재활용하든 상관 없습니다.
-
new
운영자는 유해하다고 간주했습니다. 객체를 요청하는 것과 생성하는 것에는 차이가 있습니다.new
연산자는 항상 개체를 만들고 개체 생성을 캡슐화하지 못합니다.팩토리 메소드는 캡슐화를 강제하고 생성 작업에 뗄 수없는 결합없이 객체를 요청할 수 있도록합니다.
무료 웹 사이트를 지원하고 eBook을 소유하세요!
- 22 개의 디자인 패턴과 8 가지 원칙을 자세히 설명
- 406 개의 잘 구성되고 읽기 쉽고 전문 용어가없는 페이지
- 228 개 명확하고 유용한 그림과 다이어그램
- 4 개 언어로 된 코드 예제가있는 아카이브
- 지원되는 모든 기기 : EPUB / MOBI / PDF 형식
자세히 알아보기 …