공장 모드가 주로 포함 팩토리 메소드 및 추상 공장을 , 그것의 주요 목적은, 클래스 외부에서 벗어나지이 활동을 인스턴스화 커플 링 시스템을 줄이기 위해, 특정 접근 방식은 패키지 개체를 만드는 것입니다.
공장 방법
패턴 객체를 생성하는 공장 메소드는 인터페이스를 정의하지만, A가 클래스를 인스턴스화하는 서브 클래스에 의해 결정된다. 서브 클래스로 연기 인스턴스화하는 클래스 팩토리 메소드를 보자.
예로서 다이렉트 모드를 예시한다. 우리는 orderPizza 방법을 포함하는 피자 PizzaStore 클래스와 클래스, PizzaStore 클래스의 요구를 달성하기 위해 필요, 피자 가게를 시뮬레이션. 피자 메뉴의 특정 유형에 대한 필요성은 orderPizza 과정에서 인스턴스화. 우리가 메뉴를 업데이트 할 때 새로운 사용하여 인스턴스화 직접하는 경우, 당신은 orderPizza 코드를 변경해야합니다, 그것은 분명 우리에 반대하는 "수정을 위해 폐쇄" 원칙. 우리는 선언이를 위해 공장 방법 , 객체 생성 패키지의 과정을 달성하기 위해 그렇게로서, 모든 클래스의 특정 객체 인스턴스의 원래 책임, 그리고 지금 PizzaStore에 의해 인스턴스화에 대한 책임 그룹에 의해 서브 클래스에 몇 가지 작은 변화를 할 수 있었다 목적.
public abstract class PizzaStore {
abstract Pizza createPizza(String item);
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
System.out.println("--- Making a " + pizza.getName() + " ---");
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
}
메이븐과 함께 프로젝트 시험 방법은 시험 디렉토리에 구축합니다. 그림 쇼 클래스 팩토리 메소드
추상 공장
추상 팩토리 패턴은 명시 적으로 특정 클래스를 지정 할 필요없이 관련 또는 종속 객체의 가족을 만들기위한 인터페이스를 제공합니다.
모든 피자 프랜차이즈는 높은 품질의 원료를 사용하는 경우, 우리는 원료 및 다양한 상점에 수송 원료의 생산을위한 공장을 구축 할 필요가 있음을 보장하기 위해 예, 공장 방법을 다음과 같습니다. 추상적 인 공장이 공장 정의 된 인터페이스의 원료를 만듭니다
public interface PizzaIngredientFactory {
public Dough createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
public Pepperoni createPepperoni();
public Clams createClam();
}
상이한 영역에서 원료 공장 변화에게 인터페이스를 달성하고 맛 특산품에 따른 개인화 될 수있다. 따라서, 식물 재료는 특정 원료에서 분리되었다.
추상 팩토리 클래스 다이어그램은 다음과 같습니다 :
공장 모델은 또 다른 원칙 모드 디자인을 구현 : 종속성 반전 원칙 이다, 추상에 의존하고 특정 클래스에 의존하지 않습니다 . 이 원리를 설명 : 당신은 최고 구성 요소는 낮은 수준의 구성 요소에 따라 얻을 수에 관계없이 추상적 인에 의존해야 둘 다 높은 수준 또는 낮은 수준의 구성 요소의 수 없습니다.
팩토리 메소드의 비교와 추상 공장
- 이들은 종속성을 줄임으로써, 패키지 객체를 생성하는 데 사용되는 응용 프로그램과 특정 클래스 간의 느슨한 커플 링을 촉진한다.
- 객체를 생성하는 팩토리 메소드를 구현하는 서브 클래스의 서브 클래스를 생성 할 대리자 개체 : 상속을 사용하는 팩토리 메소드입니다.
- 추상 팩토리 객체 구성 : 객체를 생성하는 방법이 지금에 의해 노출 된 공장 인터페이스입니다.
- 공장 방법은 인스턴스화 서브 클래스로 클래스를 지연 할 수 있습니다.
- 추상 공장은 특정 클래스에 의존 할 필요없이, 관련 개체의 가족을 만들 수 있습니다.