[design-patterns] 팩토리와 추상 팩토리 디자인 패턴의 기본 차이점은 무엇입니까? [닫은]

팩토리 패턴과 추상 팩토리 패턴의 기본 차이점은 무엇입니까?



답변

공장 패턴을 사용하면 구현의 인스턴스 (생산 Apple, Banana, Cherry, 말 – 특정 인터페이스의 등) IFruit.

추상 팩토리 패턴을 사용하면 누구나 자신의 팩토리를 제공 할 수있는 방법을 제공합니다. 이를 통해 창고에서 과일이나 주스에 대해 아무것도 알 필요없이 창고를 하나 IFruitFactory또는 로 만들 수 있습니다 IJuiceFactory.


답변

이 정보의 출처 : http://java.dzone.com/news/intro-design-patterns-abstract

추상 팩토리 vs. 팩토리 메소드

추상 팩토리의 메소드는 팩토리 메소드로 구현됩니다. 추상 팩토리 패턴과 팩토리 메소드 패턴은 추상 유형 및 팩토리를 통해 클라이언트 시스템을 실제 구현 클래스에서 분리합니다. 팩토리 메소드는 추상 팩토리가 컴포지션을 통해 오브젝트를 작성하는 상속을 통해 오브젝트를 작성합니다.

추상 팩토리 패턴은 AbstractFactory, ConcreteFactory, AbstractProduct, ConcreteProduct 및 Client로 구성됩니다.

구현하는 방법

팩토리 메소드 패턴, 프로토 타입 패턴 또는 싱글 톤 패턴을 사용하여 추상 팩토리 패턴을 구현할 수 있습니다. ConcreteFactory 객체는 하나의 ConcreteFactory 객체 인스턴스 만 필요하므로 Singleton으로 구현할 수 있습니다.

팩토리 메소드 패턴은 추상 팩토리 패턴의 단순화 된 버전입니다. 팩토리 메소드 패턴은 한 제품군에 속하는 제품을 작성하는 반면 추상 팩토리 패턴은 여러 제품군을 처리합니다.

팩토리 메소드는 인터페이스와 추상 클래스를 사용하여 클라이언트를 생성기 클래스와 결과 제품에서 분리합니다. Abstract Factory에는 여러 팩토리 메소드를위한 컨테이너 인 생성기가 있으며 클라이언트와 생성기 및 제품을 분리하는 인터페이스가 있습니다.

팩토리 메소드 패턴을 사용하는 경우

클라이언트를 사용하는 특정 제품에서 클라이언트를 분리해야하는 경우 팩토리 메소드 패턴을 사용하십시오. 팩토리 메소드를 사용하여 제품 인스턴스 작성 및 구성에 대한 책임을 클라이언트에게 줄이십시오.

추상 팩토리 패턴을 사용하는 경우

클라이언트가 제품 클래스에서 분리되어야하는 경우 추상 팩토리 패턴을 사용하십시오. 프로그램 구성 및 수정에 특히 유용합니다. Abstract Factory 패턴은 다른 클래스와 함께 사용해야하는 클래스에 대한 제한 조건을 시행 할 수도 있습니다. 새로운 콘크리트 공장을 만드는 것은 많은 작업 일 수 있습니다.

예 :

추상 팩토리 예 1

파스타 제조업체에서 디스크가 다른 유형의 파스타를 준비하기위한이 사양은 Abstract Factory이며 각 특정 디스크는 Factory입니다. 모든 팩토리 (파스타 메이커 디스크)는 추상 팩토리에서 속성을 상속합니다. 각 개별 디스크에는 파스타를 만드는 방법에 대한 정보가 포함되어 있지만 파스타 메이커에는 없습니다.

추상 팩토리 예제 2 :

스탬핑 장비는 추상 제품 객체를 생성하는 작업을위한 인터페이스이므로 Abstract Factory에 해당합니다. 다이는 콘크리트 제품을 만들 때 콘크리트 팩토리에 해당합니다. 각 부품 범주 (후드, 도어 등)는 추상 제품에 해당합니다. 특정 부품 (즉, 99 캠리 용 운전자 측면 도어)은 콘크리트 제품에 해당합니다.

공장 방법 예 :

완구 회사는 팩토리를 사용하여 제품 오브젝트를 작성할 수 있으므로 Creator에 해당합니다. 특정 유형의 장난감 (말 또는 자동차)을 제조하는 장난감 회사의 부서는 ConcreteCreator에 해당합니다.


답변

팩토리 패턴 : 팩토리는 IProduct 구현을 생성합니다.

추상 팩토리 패턴 : 팩토리 팩토리는 IFactories를 생성하여 IProducts를 생성합니다. 🙂

[의견에 따라 업데이트]
내가 이전에 쓴 것은 적어도 위키 백과 에 따르면 정확하지 않습니다 . 추상 팩토리는 단순히 팩토리 인터페이스입니다. 이를 통해 런타임에 팩토리를 전환하여 다른 컨텍스트에서 다른 팩토리를 허용 할 수 있습니다. OS, SQL 제공자, 미들웨어 드라이버 등에 따라 다른 팩토리가있을 수 있습니다.


답변

추상 팩토리 패턴

  • 구체적인 클래스를 지정하지 않고 관련 또는 종속 객체의 패밀리를 작성하기위한 인터페이스를 제공하십시오.

  • 추상 팩토리 패턴은 팩토리 메소드 패턴과 매우 유사합니다. 두 가지 차이점 중 하나는 Abstract Factory 패턴을 사용하면 클래스가 컴포지션을 통해 객체 인스턴스화의 책임을 다른 객체에 위임하는 반면 Factory Method 패턴은 상속을 사용하고 원하는 객체 인스턴스화를 처리하기 위해 서브 클래스에 의존한다는 것입니다.

  • 실제로, 위임 된 객체는 종종 팩토리 메소드를 사용하여 인스턴스화를 수행합니다!

공장 패턴

  • 팩토리 패턴은 생성 패턴의 예입니다

  • 창작 패턴은 객체 인스턴스화 프로세스를 추상화합니다. 객체 생성 방식을 숨기고 객체 생성 및 구성 방식과 무관하게 전체 시스템을 만들 수 있습니다.

  • 클래스 생성 패턴은 상속을 사용하여 인스턴스화 할 객체를 결정하는 데 중점을 둡니다.

  • 객체 생성 패턴은 다른 객체로의 인스턴스화 위임에 초점을 둡니다.

참조 :
팩토리 vs 추상 팩토리


답변

팩토리 메소드 : 특정 기본 클래스에서 파생되는 오브젝트를 작성하는 팩토리가 있습니다.

추상 팩토리 : 다른 팩토리를 작성하는 팩토리가 있으며이 팩토리 는 기본 클래스에서 파생 된 오브젝트를 작성합니다. 팩토리 메소드와 같이 단일 객체를 만들지 않고 관련 객체 모음을 만들려는 경우가 종종 있습니다.


답변

추상 팩토리는 관련 객체를 만들기위한 인터페이스이지만 팩토리 방법은 방법입니다. 추상 팩토리는 팩토리 메소드로 구현됩니다.

여기에 이미지 설명을 입력하십시오


답변

기본 차이점 :

팩토리 : 인스턴스화 로직을 클라이언트에 노출시키지 않고 객체를 만듭니다.

팩토리 메소드 : 객체를 생성하기위한 인터페이스를 정의하지만 서브 클래스가 인스턴스화 할 클래스를 결정하도록합니다. Factory 메소드는 클래스가 서브 클래스에 대한 인스턴스화를 연기하게합니다

Abstract Factory : 구체적인 클래스를 지정하지 않고 관련 또는 종속 객체의 패밀리를 작성하기위한 인터페이스를 제공합니다.

AbstractFactory 패턴은 컴포지션을 사용하여 객체 생성 책임을 다른 클래스에 위임하는 반면 Factory 메소드 패턴은 상속을 사용하고 파생 클래스 또는 서브 클래스를 사용하여 객체 생성

에서 oodesign 기사 :

팩토리 클래스 다이어그램 :

여기에 이미지 설명을 입력하십시오

예 : StaticFactory

 public class ShapeFactory {

   //use getShape method to get object of type shape
   public static Shape getShape(String shapeType){
      if(shapeType == null){
         return null;
      }
      if(shapeType.equalsIgnoreCase("CIRCLE")){
         return new Circle();

      } else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();

      } else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
      }

      return null;
   }
}

FactoryMethod 예제를 구현하는 비 정적 팩토리는이 게시물에서 사용할 수 있습니다.

디자인 패턴 : 팩토리 vs 팩토리 메소드 vs 추상 팩토리

사용시기 : 클라이언트는 클래스 만 필요하며 어떤 구체적인 구현을하고 있는지 상관하지 않습니다.

팩토리 메소드 클래스 디 가람 :

여기에 이미지 설명을 입력하십시오

사용시기 : 클라이언트는 런타임에 어떤 구체적인 클래스를 작성해야하는지 알지 못하지만 작업을 수행 할 클래스를 얻으려고합니다.

Dzone 에서 추상 팩토리 클래스 다이어그램

여기에 이미지 설명을 입력하십시오

사용시기 : 시스템에서 여러 제품군을 작성해야하거나 구현 세부 사항을 노출하지 않고 제품 라이브러리를 제공하려는 경우.

위 기사의 소스 코드 예제는 개념을 명확하게 이해하는 데 매우 좋습니다.

코드 예제와 관련된 SE 질문 :

공장 패턴. 팩토리 메소드는 언제 사용합니까?

차이점 :

  1. 추상 팩토리 클래스는 종종 팩토리 메소드로 구현되지만 프로토 타입을 사용하여 구현할 수도 있습니다.
  2. 디자인은 Factory Method (더 복잡하지 않고 사용자 정의가 가능하며 서브 클래스가 확산 됨)를 사용하여 시작하여 더 많은 유연성이 필요한 다른 생성 패턴 (보다 유연하고 더 복잡한)으로 발전합니다.
  3. 팩토리 메소드는 일반적으로 템플리트 메소드 내에서 호출됩니다.

다른 유용한 기사 :

factory_method sourcemaking에서

abstract_factory sourcemaking에서

journaldev의 추상 공장 디자인 패턴