반응형
추상 팩토리 패턴(abstract factory pattern)
추상 팩토리 패턴이란?
추상 팩토리 패턴은 관련된 여러 객체를 일관된 방식으로 생성하는 인터페이스를 제공하는 패턴이다.
즉, 관련성 있는 여러 종류의 객체를 생성하는 경우 사용된다.. 추상 팩토리 패턴을 사용하면 구체적으로 어떤 클래스의 인스턴스를 사용하는지 클라이언트에게 감출 수 있다.
이 추상 팩토리 패턴을 이해하기 위해서는 팩토리 메서드 패턴을 이해해야 한다. 왜냐면 팩토리 메서드 패턴에서 발전한 것이 추상 팩토리 패턴이기 때문이다.
--> 팩토리 메서드 패턴 학습하러 가기
팩토리 메서드 VS 추상 팩토리
팩토리 메서드 추상 팩토리 의도 단일 유형 객체 생성 관련 유형 그룹으로 관리 구현 방법 추상 클래스 인터페이스 다만, 구현방법은 달라질 수 있기 때문에 기본적인 것은 이렇다는 것만...
결국 추상 팩토리방법은 팩토리 메서드 여러개를 동시에 관리하기 위해서 사용하는 걸로 이해된다.
왜 사용하나요?
- 팩토리 메서드에서의 장점 그대로 사용
- 팩토리 메서드에서 유형간 관련 있는 것들을 묶어 관리하고자 사용
문제점
- 코드 복잡성 증가
구현 방법 (자바)
1. Pizza 인터페이스
package com.example.dessignpattern.creational.abstractfactory;
public interface Pizza {
void eat();
}
2. 음료 인터페이스
package com.example.dessignpattern.creational.abstractfactory;
public interface Drink {
void drink();
}
3. 팩토리 인터페이스
package com.example.dessignpattern.creational.abstractfactory;
public interface Factory {
Pizza createPizza();
Drink createDrink();
}
4. 불고기 관련 메뉴 만들기
- 불고기 피자
package com.example.dessignpattern.creational.abstractfactory;
public class BulgogiPizza implements Pizza {
@Override
public void eat() {
System.out.println("불고기 피자 냠냠 ~");
}
}
- 콜라 (불고기와 어울리는 메뉴라고 가정...)
package com.example.dessignpattern.creational.abstractfactory;
public class Cola implements Drink {
@Override
public void drink() {
System.out.println("콜라 꿀꺽꿀꺽");
}
}
- 불고기 그룹 팩토리
package com.example.dessignpattern.creational.abstractfactory;
public class BulgogiFactory implements Factory {
@Override
public Pizza createPizza() {
return new BulgogiPizza();
}
@Override
public Drink createDrink() {
return new Cola();
}
}
5. 추가 메뉴 (콤비네이션) 만들기
- 콤비네이션 피자
package com.example.dessignpattern.creational.abstractfactory;
public class CombinationPizza implements Pizza {
@Override
public void eat() {
System.out.println("콤비네이션 피자 냠냠");
}
}
- 맥주
package com.example.dessignpattern.creational.abstractfactory;
public class Beer implements Drink {
@Override
public void drink() {
System.out.println("맥주 꿀꺽꿀꺽");
}
}
- 콤비네이션 그룹 생성기
package com.example.dessignpattern.creational.abstractfactory;
public class CombinationFactory implements Factory{
@Override
public Pizza createPizza() {
return new CombinationPizza();
}
@Override
public Drink createDrink() {
return new Beer();
}
}
- 이런 식으로 관련 그룹이 추가되면 한번에 관리할 수 있도록 하여 손쉽게 관리할 수 있다.
반응형
'Design Pattern > 생성 패턴(Creational patterns)' 카테고리의 다른 글
Prototype Pattern, 프로토타입 패턴 (0) | 2023.07.11 |
---|---|
Builder Pattern, 빌더 패턴 (0) | 2023.06.20 |
Factory Method Pattern, 팩토리 메서드 패턴 (0) | 2023.06.07 |
SingleTon Pattern , 싱글톤 패턴 (0) | 2023.06.07 |