@Getter
@Setter
@ToString
public class Ship {
private String name;
private String color;
private String logo;
}
만들어야할 Product의 종류가 늘어날수록 Factory 클래스는 커진다.
public class ShipFactory {
public static Ship orderShip(String name, String email) {
argumentValidationCheck(name, email);
System.out.println(name + "만들 준비중");
Ship ship = new Ship();
ship.setName(name);
writeLogo(name, ship);
coloringShip(name, ship);
System.out.println(ship.getName() + " 다 만들었습니다.");
return ship;
}
private static void argumentValidationCheck(String name, String email) {
if(isNotValid(name)) {
throw new IllegalArgumentException("배 이름이 존재하지 않습니다.");
}
if(isNotValid(email)) {
throw new IllegalArgumentException("연락받을 이메일 정보가 존재하지 않습니다.");
}
}
private static void writeLogo(String name, Ship ship) {
if(isWhiteship(name)) {
ship.setLogo("\uD83D\uDEE5");
} else if(isBlackship(name)) {
ship.setLogo("😃");
}
}
private static void coloringShip(String name, Ship ship) {
if(isWhitehhip(name)) {
ship.setColor("whiteship");
} else if(isBlackship(name)) {
ship.setLogo("black");
}
}
private static boolean isWhiteship(String name) {
return name.equalsIgnoreCase("whiteship");
}
private static boolean isBlackship(String name) {
return name.equalsIgnoreCase("blackship");
}
private static boolean isNotValid(String name) {
return name == null || name.isBlack();
}
}
public interface ShipFactory {
Ship createShip();
default Ship orderShip(String name, String email) {
validate(name, email);
prepareFor(name);
Ship ship = new createShip();
sendEmailTo(Ship);
return ship;
}
private void validate(String name, String email) {
if(name == null || name.isBlank()) {
throw new IllegalArgumentException("배 이름이 존재하지 않습니다.");
}
if(email == null || email.isBlank()) {
throw new IllegalArgumentException("연락받을 이메일 정보가 존재하지 않습니다.");
}
}
private void prepareFor(String name) {
System.out.println(name + "만들 준비중");
}
private void sendEmailTo(Ship ship) {
System.out.println(ship.getName()) + "다 만들었습니다.");
}
}
public class WhiteShipFactory implements ShipFactory {
@Override
public ship createShip() {
return new WhiteShip();
}
}
public class BlackShipFactory implements ShipFactory {
@Override
public Ship createShip() {
return new BlackShip();
}
}
@Getter
@Setter
@ToString
public class Ship {
private String name;
private String color;
private String logo;
}
public class WhiteShip extends Ship {
public WhiteShip() {
setName("whiteship");
setLogo("\uD83D\uDEE5");
setColor("white");
}
}
public class BlackShip extends Ship {
public BlackShip() {
setName("blackship");
setColor("black");
setLogo("😃");
}
}