Factory Method Pattern 정의
팩토리 메서드 패턴은 팩토리 패턴의 확장 패턴으로, 팩토리 패턴과 템플릿 메서드 패턴이 결합된 패턴이다
팩토리 패턴에 추상화를 결합하여 패턴을 확장한다
추상화를 통해서 골격(상위) 클래스를 제공하고, 상세한 구현은 하위 클래스로 위임
public abstract class Factory {
public Product create() {
return createProduct();
}
protected abstract Product createProduct();
}
public class ProductFactory extends Factory {
@Override
protected Product createProduct() {
return new LGProduct();
}
}
위의 예제에서 abstract class인 Factory가 골격(상위) 클래스이고, ProductFactory가 구현(하위) 클래스에 해당한다.
팩토리 메서드 패턴이 팩토리 + 탬플릿 메서드 패턴이라고 말하는 이유는 위의 abstract 클래스의 create 메서드를 보면 알 수 있다.
create 메서드는 abstract class의 abstract 메서드가 아니기 때문에 해당 메서드는 재정의가 불가능하다.
그렇기 때문에 해당 메서드에서 create를 호출할 때 실행하고 싶은 메서드를 나열하여 탬플릿화 할 수 있게 된다.
public abstract class Factory {
public void create() {
// template method
createProduct();
createSide();
logDescription();
}
protected abstract Product createProduct();
}
실제 팩토리 메서드 패턴을 호출하는 코드를 보자
public class Main {
public static void main(String[] args) {
Factory factory = new ProductFactory();
Product product = factory.create();
product.name();
}
}
이러한 형태라면, 사용자 코드에서는 create 메서드 내에 변화는 신경 쓸 필요가 없게 된다. ( 느슨한 결합 )
또한, 다른 종류의 Factory를 호출하는 코드로 바꾸어 끼고 싶다고 하여도, 다른 코드는 변경 없이 Factory를 생성하는 부분만 교체하면 된다.
'DesignPattern' 카테고리의 다른 글
[DesignPattern] Builder Pattern ( 빌더 패턴 ) (0) | 2021.05.21 |
---|---|
[DesignPattern] Abstract Factory VS Factory Method 차이 (0) | 2021.05.15 |
[DesignPattern] Abstract Factory Pattern ( 추상 팩토리 패턴 ) (0) | 2021.05.13 |
[DesignPattern] Singleton Pattern ( 싱글턴 패턴 ) (0) | 2021.05.12 |
[DesignPattern] Factory Pattern (팩토리 패턴) (생성자 패턴) (0) | 2021.05.11 |