팩토리 메서드 패턴

Lee·2023년 5월 16일
0

디자인 패턴

목록 보기
5/7

팩토리 메서드 패턴

  • 객체를 만들어내는 부분을 서브 클래스에 위임하는 디자인 패턴
  • 객체를 생성하는 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성하리에 대한 결정을 서브클래스가 내리도록 한다.

구현

public interface AirVehicle {
    void build();
}
  • AirVehicle의 역할을 추상화한 인터페이스
public abstract class AirVehicleFactory {
    public AirVehicle create() {
        AirVehicle vehicle = createAirVehicle();
        vehicle.build();
        return vehicle;
    }

    protected abstract AirVehicle createAirVehicle();
}
  • 최상위 factory class로서 객체 생성 메서드를 추상화하여 서브 클래스로 하여금 구현하도록 하는 역할
  • 실제 객체를 생성하는 정보는 없으나 객체 생성 메서드인 createAirVehicle()을 통해 AirVehicle을 생성
public class Airplane implements AirVehicle{
    @Override
    public void build() {
        System.out.println("build airplane");
    }
}
  • AirVehicle 인터페이스를 구현한 Airplane 클래스
public class Helicopter implements AirVehicle{
    @Override
    public void build() {
        System.out.println("build helicopter");
    }
}
  • AirVehicle 인터페이스를 구현한 Helicopter 클래스
public class AirplaneFactory extends AirVehicleFactory{
    @Override
    protected AirVehicle createAirVehicle() {
        return new Airplane();
    }
}
  • AirVehicleFactory를 상속받아 Airplane 객체를 생성하는 factory 클래스
public class HelicopterFactory extends AirVehicleFactory{
    @Override
    protected AirVehicle createAirVehicle() {
        return new Helicopter();
    }
}
  • AirVehicleFactory를 상속받아 Helicopter 객체를 생성하는 factory 클래스

사용 이유

  1. 클래스 생성과 사용의 로직을 분리하고자 할 경우
  2. 객체 생성 정보를 캡슐화를 통해 은닉할 경우

단점

  1. 각 제품 구현체마다 팩토리 객체를 모두 구현해주어야 하기 때문에 서브 클래스 수가 증가

참고
팩토리 메서드(Factory Method) 패턴 - 완벽 마스터하기

profile
발전하고 싶은 백엔드 개발자

0개의 댓글