[디자인 패턴] AbstractFactory 패턴
이멀젼씨
·2020. 3. 11. 11:57
- 정의
서로 관련이 있는 객체들을 묶고 조건에 따라 관련된 객체들을 한꺼번에 객체를 생성하는 패턴이다
- UML
1. Food인터페이스를 만들고 이를 구현하는 WinterFood와 SummerFood클래스를 만든다
2. Clothes인터페이스를 만들고 이를 구현하는 WinterClothes와 SummerClothes클래스를 만든다
3. SeasonPlanFactory인터페이스를 만들고 이를 구현하는 SummerPlan과 WinterPlan클래스를 만들어 계절별로 계획을 실행할 수 있도록 한다
- 코드
Food interface
public interface Food {
public void eat();
}
WinterFood class
public class WinterFood implements Food{
@Override
public void eat() {
System.out.println("따뜻한 음식 준비");
}
}
SummerFood class
public class SummerFood implements Food{
@Override
public void eat() {
System.out.println("시원한 음식 준비");
}
}
Clothes interface
public interface Clothes {
public void wear();
}
WinterClothes class
public class WinterClothes implements Clothes{
@Override
public void wear() {
System.out.println("두꺼운 옷 준비");
}
}
SummerClothes class
public class SummerClothes implements Clothes{
@Override
public void wear() {
System.out.println("얇은 옷 준비");
}
}
SeasonPlanFactory interface
public interface SeasonPlanFactory {
public Clothes prepareClothes();
public Food prepareFood();
}
WinterPlan class
public class WinterPlan implements SeasonPlanFactory{
@Override
public Clothes prepareClothes() {
return new WinterClothes();
}
@Override
public Food prepareFood() {
return new WinterFood();
}
}
SummerPlan class
public class SummerPlan implements SeasonPlanFactory{
@Override
public Clothes prepareClothes() {
return new SummerClothes();
}
@Override
public Food prepareFood() {
return new SummerFood();
}
}
Main class
public class Main {
public static void main(String[] args) {
SeasonPlanFactory seasonPlanFactory;
System.out.println("겨울 준비 계획");
seasonPlanFactory = new WinterPlan();
seasonPlanFactory.prepareClothes().wear();
seasonPlanFactory.prepareFood().eat();
System.out.println();
System.out.println("여름 준비 계획");
seasonPlanFactory = new SummerPlan();
seasonPlanFactory.prepareClothes().wear();
seasonPlanFactory.prepareFood().eat();
}
}
- 설명
'A라는 계획이 세워졌을 때 ~과 ~을 하고, B라는 계획이 세워졌을 때 ~과 ~을 한다'라는 상황에서 사용하면 되겠다
팩토리 메서드 패턴과는 다르게 추상 팩토리 패턴은 개별단위가 아니라 전체를 하나의 제품군으로 묶어서 이해하면 될 것 같다
위의 예시처럼 여름계획을 세우는 경우엔 짧은 옷과 시원한 음식을 한꺼번에 준비하고, 겨울 계획을 세우는 경우엔 두꺼운 옷과 따뜻한 음식을 준비하는 것처럼 말이다
장점
- 제품군 간의 교체가 쉬움
단점
- 새로운 제품이 추가되어야 할 경우 모든 Factory클래스를 수정해야 함
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] Composite 패턴 (0) | 2020.03.13 |
---|---|
[디자인 패턴] Bridge 패턴 (0) | 2020.03.12 |
[디자인 패턴] Builder 패턴 (0) | 2020.03.10 |
[디자인 패턴] ProtoType 패턴 (0) | 2020.02.11 |
[디자인 패턴] Singleton 패턴 (0) | 2020.02.10 |