추상 팩토리란 추상화(Abstract ) + 팩토리(Factory)를 합친 단어이다.
- 추상화 : 실제 코드 부분이 작성되지 않고 어떻게 사용할지 명세만 정의하는 것이다.
- 팩토리 : 객체의 생성을 팩토리 클래스로 위임하여 객체를 생성하는 패턴
- 추상 팩토리 : 팩토리를 추상화해서 관련있는 객체의 집합을 생성할 수 있는 팩토리를 만들고 조건에 따라 팩토리를 생성해서 서로 관련된 객체를 생성하는 패턴
public abstract class Phone {
public abstract void power();
}
public class SamsungPhone extends Phone {
@Override
public void power() {
System.out.println("samsung phone power on");
}
}
public class ApplePhone extends Phone {
@Override
public void power() {
System.out.println("apple phone power on");
}
}
SamsungPhone 클래스와 ApplePhone 클래스는 Phone 추상클래스를 상속하고 power() 메소드를 오버라이딩한다.
public interface PhoneFactory {
public Phone create();
}
public class ApplePhoneFactory implements PhoneFactory {
@Override
public Phone create() {
return new ApplePhone();
}
}
public class SamsungPhoneFactory implements PhoneFactory {
@Override
public Phone create() {
return new SamsungPhone();
}
}
ApplePhoneFactory 클래스와 SamsungPhoneFactory 클래스는 PhoneFactory를 상속하고 create()메소드를 오버라이딩한다.
create() 메소드는 각각 팩토리 클래스 별로 제조사에 맞는 Phone 클래스를 반환한다.
public enum PhoneType {
SAMSUNG, APPLE
}
public class Main {
public static void main(String[] args) {
PhoneFactory phoneFactory = null;
PhoneType phoneType = PhoneType.SAMSUNG;
switch (phoneType) {
case SAMSUNG:
phoneFactory = new SamsungPhoneFactory();
break;
case APPLE:
phoneFactory = new ApplePhoneFactory();
break;
default:
throw new RuntimeException(phoneType.toString() + " is not existed");
}
Phone phone = phoneFactory.create();
phone.power();
}
}
enum 타입인 phoneType 별로 PhoneFactory를 생성하고 create() 메소드를 실행한 뒤, phone의 power() 메소드를 실행한다.
phoneType 별로 생성되는 Factory가 바뀌어서 생성되는 phone 또한 바뀌는 것을 볼 수 있다.
출처: https://dev-momo.tistory.com/entry/추상-팩토리-패턴-Abstract-Factory-Pattern [Programming Note]
출처: bamdule.tistory.com/161