design patterns : factory method

This commit is contained in:
haerong22
2021-11-06 02:56:41 +09:00
parent 3c8c5e5874
commit b21ae6ffca
8 changed files with 140 additions and 0 deletions

View File

@@ -0,0 +1,10 @@
package FactoryMethod.after;
public class BlackShip extends Ship{
public BlackShip(String name) {
setName(name);
setColor("black");
setLogo("");
}
}

View File

@@ -0,0 +1,9 @@
package FactoryMethod.after;
public class BlackShipFactory extends DefaultShipFactory{
@Override
public Ship createShip(String name) {
return new BlackShip(name);
}
}

View File

@@ -0,0 +1,15 @@
package FactoryMethod.after;
public class Client {
public static void main(String[] args) {
Client client = new Client();
client.print(new WhiteShipFactory(), "WhiteShip", "email@email.com");
client.print(new BlackShipFactory(), "BlackShip", "email@email.com");
}
private void print(ShipFactory shipFactory, String name, String email) {
System.out.println(shipFactory.orderShip(name, email));
}
}

View File

@@ -0,0 +1,24 @@
package FactoryMethod.after;
public abstract class DefaultShipFactory implements ShipFactory{
@Override
public void validate(String name, String email) {
if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("배 이름을 지어주세요.");
}
if (email == null || email.isEmpty()) {
throw new IllegalArgumentException("연락처를 남겨주세요.");
}
}
@Override
public void prepareFor(String name) {
System.out.println(name + " 만들 준비 중");
}
@Override
public void sendEmailTo(String email, Ship ship) {
System.out.println(ship.getName() + " 다 만들었습니다.");
}
}

View File

@@ -0,0 +1,43 @@
package FactoryMethod.after;
public class Ship {
private String name;
private String color;
private String logo;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getLogo() {
return logo;
}
public void setLogo(String logo) {
this.logo = logo;
}
@Override
public String toString() {
return "Ship{" +
"name='" + name + '\'' +
", color='" + color + '\'' +
", logo='" + logo + '\'' +
'}';
}
}

View File

@@ -0,0 +1,20 @@
package FactoryMethod.after;
public interface ShipFactory {
default Ship orderShip(String name, String email) {
validate(name, email);
prepareFor(name);
Ship ship = createShip(name);
sendEmailTo(email, ship);
return ship;
}
Ship createShip(String name);
void validate(String name, String email);
void prepareFor(String name);
void sendEmailTo(String email, Ship ship);
}

View File

@@ -0,0 +1,10 @@
package FactoryMethod.after;
public class WhiteShip extends Ship {
public WhiteShip(String name) {
setName(name);
setLogo("\uD83D\uDEE5");
setColor("white");
}
}

View File

@@ -0,0 +1,9 @@
package FactoryMethod.after;
public class WhiteShipFactory extends DefaultShipFactory {
@Override
public Ship createShip(String name) {
return new WhiteShip(name);
}
}