•
팩토리 메소드 패턴은 객체를 생성할 때 필요한 인터페이스를 정의한다.
◦
어떤 클래스의 인스턴스를 만들지는 하위 클래스가 결정하며 팩토리 메소드 패턴을 사용하면 인스턴스를 만드는 작업을 하위 클래스에세 넘기는 것이다.
•
팩토리 메소드 패턴으로 구체 타입 인스턴스를 만드는 작업을 캡슐화할 수 있다.
public interface Product {
void description();
}
public class Banana {
@Override
public void description() {
System.out.println("바나나");
}
}
public abstract class Creator {
public Product create() {
return createProduct();
}
protected abstract Product createProduct();
}
public class BananaCreator extends Creator {
@Override
protected Product createProduct() {
return new Banana();
}
}
public static void main(String[] args) {
Creator creator = new BananaCreator();
Product product = creator.create();
}
Java
복사
◦
Creator 추상 클래스에 구현되어 있는 다른 메소드는 팩토리 메소드에 의해 생산된 제품으로 필요한 작업을 처리한다.
◦
하지만 실제 팩토리 메소드를 구현하고 제품을 만드는 일은 하위 클래스에서만 처리한다.
•
사용하는 하위 클래스의 타입에 따라 생산되는 객체 인스턴스가 달라지게 되는 것이다.
기타
•
구상 클래스가 하나인 경우에도 팩토리 메소드 패턴을 사용하면 좋을까?
◦
충분히 유용하다. 생산과 사용의 책임을 분리할 수 있기 때문이다.
◦
처리하는 부분이 변경되더라도 생성되는 부분은 변경이 발생하지 않는다. 느슨하게 결합되어 있기 때문이다.
•
팩토리 메소드와 생산자 클래스는 추상으로 선언하지 않아도 된다.
◦
간단한 하위 클래스는 기본 팩토리 메소드를 정의해서 Creator의 하위 클래스없이 만들 수 있다.