팩토리 메서드 패턴이란?
<aside> 💡 구체적으로 어떤 인스턴스를 만들지는 서브 클래스(인터페이스)가 정한다.
</aside>
public interface ShipFactory {
default Ship orderShip(String name, String email) {
//validate
validate(name,email);
prepareFor(name);
Ship ship = createShip();
sendEmailTo(email, ship);
return ship;
}
Ship createShip();
private void validate(String name,String email){
if (name == null || name.isBlank()) {
throw new IllegalArgumentException("배 이름을 지어주세요.");
}
if (email == null || email.isBlank()) {
throw new IllegalArgumentException("연락처를 남겨주세요.");
}
}
private static void prepareFor(String name) {
System.out.println(name + " 만들 준비 중");
}
private static void sendEmailTo(String email, Ship ship) {
System.out.println(ship.getName() + " 다 만들었습니다.");
}
}
public class BlackShip extends Ship{
public BlackShip(){
setName("blackship");
setLogo("⚓");
setColor("black");
}
}
public class BlackShipFactory implements ShipFactory{
@Override
public Ship createShip() {
return new BlackShip();
}
}
public class WhiteShip extends Ship{
public WhiteShip(){
setName("whiteship");
setLogo("\\uD83D\\uDEE5");
setColor("white");
}
}
public class WhiteShipFactory implements ShipFactory{
@Override
public Ship createShip() {
return new WhiteShip();
}
}