추상 팩토리 패턴
- 구체적인 클래스에 의존하지 않고 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 디자인 패턴
- 상세 서브클래스를 정의하지 않고도 서로 관련성이 있거나 독립적인 여러 객체의 군을 생성하기 위한 인터페이스를 제공
구현
public abstract class AbstractFactory {
abstract Motor createMotor();
abstract Wheel createWheel();
}
public class MotorVehicleFactory extends AbstractFactory {
@Override
Motor createMotor() {
return new MotorVehicleMotor();
}
@Override
Wheel createWheel() {
return new MotorVehicleWheel();
}
}
- 일반 자동차 생산을 위한 factory class
public interface Motor {
void equip();
String type();
}
public interface Wheel {
void equip();
String type();
}
public class MotorVehicleMotor implements Motor{
@Override
public void equip() {
System.out.println("일반차용 모터가 장착되었습니다.");
}
@Override
public String type() {
return "Motor";
}
}
- 모터 인터페이스를 구현한 일반 자동차용 모터 클래스
public class MotorVehicleWheel implements Wheel {
@Override
public void equip() {
System.out.println("일반차용 바퀴가 장착되었습니다.");
}
@Override
public String type() {
return "Wheel";
}
}
- 바퀴 인터페이스를 구현한 일반 자동차용 바퀴 클래스
사용 이유
- 관련 제품의 다양한 제품군과 함께 작동해야 할때, 해당 제품의 구체적인 클래스에 의존하고 싶지 않은 경우
- 객체 생성 정보를 캡슐화를 통해 은닉할 경우
단점
- 각 제품 구현체마다 팩토리 객체를 모두 구현해주어야 하기 때문에 서브 클래스 수가 증가
- 추상 팩토리의 내부사항 변경 시 모든 팩토리에 대한 수정이 필요하다.
참고
추상 팩토리(Abstract Factory) 패턴 - 완벽 마스터하기