728x90
😀 팩토리 메서드 패턴?
객체를 생성하는 인터페이스는 미리 정의하되, 객체 생성은 팩토리(서브 클래스)로 위임하는 패턴.
😀 팩토리 메서드 패턴을 사용하는 이유?
객체 생성하는 코드를 분리하여 클라이언트 코드와 결합도를 낮추어 코드를 건드리는 횟수를 최소화
😀 팩토리 메서드 패턴 주의점
Factory Method가 중첩되기 시작하면 굉장히 복잡해 질 수 있다. 또한 상속을 사용하지만 부모클래스를 전혀 확장하지 않는다. 따라서, 이 패턴은 extends관계를 잘못 이용한 것으로 볼 수 있다.
extends 관계를 남발하게 되면 프로그램의 엔트로피가 높아질 수 있으므로 Factory Method 패턴의 사용을 주의해야한다.
😀 코드로 알아보자!!
Drink.java
package study.factoryMethodPattern.code1;
public abstract class Drink {
abstract public void info();
}
Coffee.java
package study.factoryMethodPattern.code1;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Coffee extends Drink{
@Override
public void info() {
log.info("커피 맛");
}
}
Coke.java
package study.factoryMethodPattern.code1;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class Coke extends Drink{
@Override
public void info() {
log.info("콜라 맛");
}
}
DrinkFactory.java
package study.factoryMethodPattern.code1;
public abstract class DrinkFactory {
abstract public Drink create(String drinkType);
}
VendingMachine.java
package study.factoryMethodPattern.code1;
public class VendingMachine extends DrinkFactory{
@Override
public Drink create(String drinkType) {
switch(drinkType) {
case "coffee" :
return new Coffee();
case "coke" :
return new Coke();
default:
throw new RuntimeException(drinkType + "is not existed");
}
}
}
FactoryMethodPatternTest.java
package study.factoryMethodPattern;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import study.factoryMethodPattern.code1.DrinkFactory;
import study.factoryMethodPattern.code1.VendingMachine;
@Slf4j
public class FactoryMethodPatternTest {
@Test
void code1test(){
DrinkFactory drinkFactory = new VendingMachine();
//Drink drink1 = drinkFactory.create("coffee");
//drink1.info();
drinkFactory.create("coffee").info();
}
}
'DESIGN PATTERN' 카테고리의 다른 글
[디자인패턴] 싱글톤패턴(singleton Pattern) 이란? (+static) - 개발자 배찌 (0) | 2022.04.14 |
---|---|
[디자인패턴] 추상 팩토리 패턴 (abstract Factory Pattern) 이란? - 개발자 배찌 (0) | 2022.04.13 |
[디자인패턴] 전략패턴 (strategy Pattern)이란? - 개발자 배찌 (0) | 2022.04.12 |
[디자인패턴] 어댑터 패턴(Adapter Pattern)이란? - 개발자 배찌 (0) | 2022.04.11 |
[디자인패턴] 책임 연쇄 패턴 (Chai- of-responsibility Pattern) - 개발자 배찌 (0) | 2022.04.11 |