design patterns : factory method
This commit is contained in:
10
design-pattern/gof/src/FactoryMethod/after/BlackShip.java
Normal file
10
design-pattern/gof/src/FactoryMethod/after/BlackShip.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package FactoryMethod.after;
|
||||||
|
|
||||||
|
public class BlackShip extends Ship{
|
||||||
|
|
||||||
|
public BlackShip(String name) {
|
||||||
|
setName(name);
|
||||||
|
setColor("black");
|
||||||
|
setLogo("⚓");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package FactoryMethod.after;
|
||||||
|
|
||||||
|
public class BlackShipFactory extends DefaultShipFactory{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Ship createShip(String name) {
|
||||||
|
return new BlackShip(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
15
design-pattern/gof/src/FactoryMethod/after/Client.java
Normal file
15
design-pattern/gof/src/FactoryMethod/after/Client.java
Normal 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));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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() + " 다 만들었습니다.");
|
||||||
|
}
|
||||||
|
}
|
||||||
43
design-pattern/gof/src/FactoryMethod/after/Ship.java
Normal file
43
design-pattern/gof/src/FactoryMethod/after/Ship.java
Normal 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 + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
20
design-pattern/gof/src/FactoryMethod/after/ShipFactory.java
Normal file
20
design-pattern/gof/src/FactoryMethod/after/ShipFactory.java
Normal 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);
|
||||||
|
}
|
||||||
10
design-pattern/gof/src/FactoryMethod/after/WhiteShip.java
Normal file
10
design-pattern/gof/src/FactoryMethod/after/WhiteShip.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package FactoryMethod.after;
|
||||||
|
|
||||||
|
public class WhiteShip extends Ship {
|
||||||
|
|
||||||
|
public WhiteShip(String name) {
|
||||||
|
setName(name);
|
||||||
|
setLogo("\uD83D\uDEE5️");
|
||||||
|
setColor("white");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package FactoryMethod.after;
|
||||||
|
|
||||||
|
public class WhiteShipFactory extends DefaultShipFactory {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Ship createShip(String name) {
|
||||||
|
return new WhiteShip(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user