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는 객체 생성을위한 인터페이스를 정의하지만 하위 클래스에서 인스턴스화 할 클래스를 결정할 수 있습니다. 이 패턴. 플라스틱 장난감 제조업체는 플라스틱 성형 분말을 가공하여 원하는 모양의 금형에 플라스틱을 주입합니다. 장난감 등급 (자동차, 액션 피규어 등)은 금형에 의해 결정됩니다.

체크리스트

  1. 다형성을 실행하는 상속 계층이있는 경우 기본 클래스에 static 팩토리 메서드를 정의하여 다형성 생성 기능을 추가하는 것을 고려하세요.
  2. 팩토리 메소드에 대한 인수를 설계하십시오. 인스턴스화 할 올바른 파생 클래스를 식별하는 데 필요한 품질 또는 특성은 무엇입니까?
  3. 객체를 처음부터 만드는 대신 재사용 할 수있는 내부 “객체 풀”을 설계하는 것이 좋습니다.
  4. 고려 모든 생성자 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 형식

자세히 알아보기 …

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다