정의 : 콘크리트 클래스를 지정하지 않고 관련 또는 상호 의존적 인 객체 세트를 생성하기위한 인터페이스를 제공합니다.
유형 : 클래스 패턴 클래스 다이어그램 작성 :
추상 공장 패턴과 공장 방법 패턴의 차이
초록 공장 패턴은 업그레이드 된 버전의 공장 메소드 패턴으로 관련 또는 상호 의존적 인 객체 세트를 만드는 데 사용됩니다. 그것과 공장 방법 모델의 차이점은 공장 방법 모델이 제품 계층 구조를 목표로한다는 것입니다. 추상 공장 모델은 여러 제품 계층 구조를 목표로합니다. 프로그래밍에서 제품 구조는 일반적으로 인터페이스 또는 추상 클래스로 나타납니다. 즉, Factory Method 모델에서 제공하는 모든 제품은 동일한 인터페이스 또는 초록 클래스에서 파생되는 반면 추상 공장 모델에서 제공하는 제품은 다른 인터페이스 또는 초록 클래스에서 파생됩니다.
추상 공장 모델에는 제품 제품군의 개념이 있습니다. 소위 제품 패밀리는 다양한 제품 계층 구조에서 기능적으로 관련된 제품으로 구성된 제품군을 말합니다. 추상 공장 모델이 제공하는 일련의 제품은 제품 패밀리를 형성합니다. 공장 방법에 의해 제공되는 일련의 제품을 계층 구조라고합니다. 우리는 여전히 자동차의 차이를 설명하기 위해 자동차를 생산하는 예를 사용합니다.
위의 클래스 다이어그램에서 해치백과 세단은 두 가지 다른 계층 구조라고합니다. 2.0 변위 차량과 2.4 변위 차량을 두 개의 다른 제품 패밀리라고합니다. 보다 구체적으로, 2.0- 변위 해치백과 2.4 차량 해치백은 동일한 레벨 구조에 속하며, 2.0- 변위 세단 및 2.4 차량 세단은 다른 레벨 구조에 속합니다. 2.0- 변위 해치백과 2.0- 차단 세단은 동일한 제품 패밀리에 속하되고 2.4- 차단 해치백과 2.4 차량 세단은 다른 제품 패밀리에 속합니다.
계층 구조 및 제품 패밀리의 개념을 이해하면 공장 방법 모델과 추상 공장 모델의 차이점을 이해하게됩니다. 공장의 모든 제품이 동일한 계층 구조에 속하는 경우, 공장 방법 모델에 속합니다. 공장의 제품이 여러 계층 구조에서 나오면 추상 공장 모델에 속합니다. 이 예에서, 공장 모델이 2.0 변위 해치백과 2.4 변위 해치백을 제공하는 경우, 공장 방법 모델에 속합니다. 공장 모델이 2.4 변위 해치백과 2.4 변위 세단의 두 가지 제품을 제공하는 경우,이 공장 모델은 제공하는 제품이 두 가지 다른 계층 구조에 속하기 때문에 추상 공장 모델입니다. 물론, 공장이 4 가지 모델의 제품을 제공하는 경우, 제품은 두 가지 계층 구조에 속하기 때문에 추상 공장 모델에 확실히 속할 것입니다.
예
공장 수업의 추상 수업 예를 살펴 보겠습니다.
패키지 추상적 인; 공개 초록 클래스 AbstractCreator {// 제품 메소드 생성 public AbstractProducta createProducta (); // 제품 생성 B 제품 방법 공개 초록 초록 프로듀스 크리젠 테포드 ();}제품의 추상 클래스 a
패키지 추상적 인; 공개 초록 클래스 AbstractProducta {// 제품별로 공유되는 메소드 공개 void sharemethod () {System.out.println ( "제품 A ..."); } // 방법 제품의 다른 하위 제품 A Public Abstract void Dosomething (); }제품의 추상 클래스 b
패키지 추상적 인; Public Abstract Class AbstractProductb {// 제품 B 공유 방법 B Public Void Sharemethod () {System.out.println ( "제품 B ..."); } // 제품의 다른 하위 작품 B Public Abstract void dosomething (); } 공장 구현 클래스 패키지 추상적 인; Public Class Creator1은 AbstractCreator를 확장합니다. } @override public acproptroductb createproductb () {return new productb1 (); }} 공장 구현 클래스 패키지 추상적 인; Public Class Creator2는 AbstractCreator를 확장합니다 {@override public acholdecta createProducta () {return new producta2 (); } @override public acpractProductb createProductb () {return new productb2 (); }}제품 A1
패키지 추상적 인; Public Class ProductA1은 AbstractProducta {@override public void dosomething () {System.out.println ( "제품 A1의 비즈니스 로직 처리 방법 ..."); }}제품 A2
패키지 추상적 인; Public Class Producta2는 acpractProducta {@override public void dosomething () {System.out.println ( "제품 A2의 비즈니스 로직 처리 방법 ..."); }}제품 B1
패키지 추상적 인; Public Class Productb1은 AbstractProductb {@override public void dosomething () {System.out.println ( "B1의 비즈니스 로직 처리 방법 ...")을 확장합니다. }}제품 B2
패키지 추상적 인; Public Class ProductB2는 AbstractProductb {@override public void dosomething () {System.out.println ( "B2의 비즈니스 논리 처리 방법 ...")을 확장합니다. }} 추상 공장 패턴의 장점
공장 방법 모델의 장점을 갖는 것 외에도 가장 중요한 장점은 제품 패밀리가 클래스 내에서 제한 될 수 있다는 것입니다. 소위 제품 패밀리는 일반적으로 특정 관계를 가지고 있습니다. 추상 공장 모델은 관리를 위해 특별히 새로운 클래스를 소개하지 않고도 수업 내 제품 패밀리 간의 관계를 정의하고 설명 할 수 있습니다.
추상 공장 패턴의 단점
제품 패밀리를 확장하는 것은 매우 힘든 일이 될 것입니다. 신제품을 제품 제품군에 추가 해야하는 경우 거의 모든 공장 수업을 수정해야합니다. 따라서 추상 공장 모델을 사용할 때 제품 계층 구조 구조의 구분이 매우 중요합니다.
해당 시나리오
초록 공장 패턴은 생성 될 객체가 일련의 상호 관련 또는 상호 의존적 인 제품 패밀리 일 때 사용할 수 있습니다. 상속 시스템에서 더 명확하게 말하면, 여러 계층 구조가있는 경우 (즉, 다수의 추상 클래스가 존재한다면) 각 계층 구조로 나뉘어 진 구현 클래스간에 특정 상관 관계 또는 제약이 있으면 추상 공장 모델을 사용할 수 있습니다. 각 계층 구조에서 구현 클래스 간의 연관성이나 제약이없는 경우 여러 독립 공장을 사용하여 제품을 만드는 것이 더 적절합니다.
요약
간단한 공장 모델, 공장 방법 모델이든 추상 공장 모델이든, 그들은 모두 공장 모델에 속하며 형태와 특성이 매우 유사합니다. 그들의 궁극적 인 목표는 분리하는 것입니다. 그것을 사용할 때, 우리는이 패턴이 공장 방법인지 추상 공장 모델인지를 신경 쓰지 않아도됩니다. 왜냐하면 그들 사이의 진화는 종종 이해하기 어렵 기 때문입니다. 종종 새로운 요구 사항이 발생하면 약간의 수정이 이루어지고 새로운 방법이 추가되면 클래스의 제품이 다른 계층 구조로 제품 패밀리를 형성하면 추상 공장 모델이됩니다. 그리고 추상 공장 모델의 경우, 제공된 제품이 더 이상 제품 패밀리를 형성하지 않도록 방법이 축소되면 공장 방법 모델로 발전합니다.
따라서 공장 모드를 사용할 때는 커플 링을 줄이기위한 목적이 달성되었는지 여부 만 관리하면됩니다.