팩토리 메소드 패턴
객체의 생성을 팩토리 클래스로 위임하여 객체를 생성하는 패턴
추상 팩토리 패턴
팩토리를 추상화해서 관련있는 객체의 집합을 생성할 수 있는 팩토리를 만들고 조건에 따라 팩토리를 생성해서 서로 관련된 객체를 생성하는 패턴
JAVA 소스 예제
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 또한 바뀌는 것을 볼 수 있다.
'IT > 디자인 패턴' 카테고리의 다른 글
[DesignPattern] 전략 패턴(Strategy Pattern) (0) | 2020.10.29 |
---|---|
[Design Pattern] 데코레이터 패턴 (Decorator Pattern) (0) | 2020.10.28 |
[디자인 패턴] 팩토리 메소드 패턴 (0) | 2020.10.19 |
[디자인 패턴] 템플릿 메소드 패턴(Template Method Pattern) (0) | 2020.10.16 |
[디자인 패턴] 프록시 패턴 (Proxy Pattern) (0) | 2020.10.15 |