Skip to content

Commit

Permalink
GoF 빌더 패턴
Browse files Browse the repository at this point in the history
  • Loading branch information
ZANGZANGS committed Dec 2, 2021
1 parent c30fae7 commit 7b4d50b
Show file tree
Hide file tree
Showing 4 changed files with 126 additions and 0 deletions.
37 changes: 37 additions & 0 deletions src/gof/dp/builder/ChicagoPizza.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package gof.dp.builder;

public class ChicagoPizza extends Pizza{

private final boolean sauceInside;

public static class Builder extends Pizza.Builder{

private boolean sauceInside = false;

public Builder sauceInside(){
sauceInside = true;
return this;
}

@Override
Pizza build() {
return new ChicagoPizza(this);
}

@Override
protected Pizza.Builder self() {
return this;
}
}


ChicagoPizza(Builder builder) {
super(builder);
this.sauceInside = builder.sauceInside;
}

public String toString() {
return toppings.toString() + " sauceInside: " + sauceInside;
}

}
33 changes: 33 additions & 0 deletions src/gof/dp/builder/NewYorkPizza.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package gof.dp.builder;

import java.util.Objects;

public class NewYorkPizza extends Pizza{

public enum Size {LARGE, FAMILY, MONSTER};
private final Size size;

public static class Builder extends Pizza.Builder{
private final Size size;


public Builder(Size size){
this.size = Objects.requireNonNull(size);
}

@Override
public NewYorkPizza build(){
return new NewYorkPizza(this);
}

@Override
protected Builder self() {
return this;
}
}

private NewYorkPizza(Builder builder) {
super(builder);
size = builder.size;
}
}
34 changes: 34 additions & 0 deletions src/gof/dp/builder/Pizza.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package gof.dp.builder;

import java.util.EnumSet;
import java.util.Objects;
import java.util.Set;

public abstract class Pizza {

public enum Topping {HAM, MUSHROOM, ONION, PEPPER, SAUSAGE};
final Set<Topping> toppings;

abstract static class Builder {
EnumSet<Topping> toppings = EnumSet.noneOf(Topping.class);

public Builder addTopping(Topping topping) {
toppings.add(Objects.requireNonNull(topping));
return self();
}
public Builder sauceInside(){
return self();
}

abstract Pizza build();
protected abstract Builder self();
}

Pizza(Builder builder){
toppings = builder.toppings.clone();
}

public String toString(){
return toppings.toString();
}
}
22 changes: 22 additions & 0 deletions src/gof/dp/builder/PizzaMaster.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package gof.dp.builder;

public class PizzaMaster {

public static void main(String[] args){
Pizza newYorkPizza = new NewYorkPizza.Builder(NewYorkPizza.Size.LARGE)
// .sauceInside()
.addTopping(Pizza.Topping.HAM)
.addTopping(Pizza.Topping.ONION)
.build();

Pizza ChicagoPizza = new ChicagoPizza.Builder()
.sauceInside()
.addTopping(Pizza.Topping.MUSHROOM)
.addTopping(Pizza.Topping.SAUSAGE)
.addTopping(Pizza.Topping.PEPPER)
.build();

System.out.println(newYorkPizza);
System.out.println(ChicagoPizza);
}
}

0 comments on commit 7b4d50b

Please sign in to comment.