Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/factory/FactoryPattern.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package factory;

import factory.pizza.Pizza;
import factory.pizzastore.impl.ChicagoPizzaStore;
import factory.pizzastore.impl.NYPizzaStore;

public class FactoryPattern {
public static void main(String[] args) {
final NYPizzaStore nyPizzaStore = new NYPizzaStore();
final Pizza pizza = nyPizzaStore.orderPizza(Pizza.PizzaType.CHEESE);
System.out.println(pizza.toString());

final ChicagoPizzaStore chicagoPizzaStore = new ChicagoPizzaStore();
final Pizza pizza1 = chicagoPizzaStore.orderPizza(Pizza.PizzaType.PEPPERONI);
System.out.println(pizza1.toString());
}
}
15 changes: 15 additions & 0 deletions src/factory/ingredient/factory/PizzaIngredientFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package factory.ingredient.factory;

import factory.ingredient.ingredients.*;
import factory.ingredient.ingredients.Pepperoni;
import factory.ingredient.ingredients.Sauce;
import factory.ingredient.ingredients.Veggies;

public interface PizzaIngredientFactory {
Dough createDough();
Sauce createSauce();
Cheese createCheese();
Veggies[] createVeggies();
Pepperoni createPepperoni();
Clams createClam();
}
Comment on lines +8 to +15
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

의존성 뒤집기 원칙(Dependency Inversion Priciple)을 활용하여
PizzaStore(고수준 구성 요소)가 가지는 피자 객체(저수준 구성 요소)에 대한 의존성을 없애기 위해
추상 팩토리 패턴 을 활용한다.

각 PizzStore 구상 클래스는 PizzaIngredientFactory를 통해 생성된 원재료를 세팅해주면 된다.
(PizzaIngredientFactory 또한 피자집의 성격에 맞는 구상 클래스를 구현해야한다.)

추상 팩토리 패턴

구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생산하는 인터페이스를 제공합니다. 구상 클래스는 서브클래스에서 만듭니다

Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package factory.ingredient.factory.impl;

import factory.ingredient.factory.PizzaIngredientFactory;
import factory.ingredient.ingredients.*;
import factory.ingredient.ingredients.impl.*;

public class ChicagoPizzaIngredientFactory implements PizzaIngredientFactory {

public Dough createDough() {
return new ThickCrustDough();
}

public Sauce createSauce() {
return new PlumTomatoSauce();
}

public Cheese createCheese() {
return new MozzarellaCheese();
}

public Veggies[] createVeggies() {
return new Veggies[]{ new BlackOlives(),
new Spinach(),
new Eggplant() };
}

public Pepperoni createPepperoni() {
return new SlicedPepperoni();
}

public Clams createClam() {
return new FrozenClams();
}
}
32 changes: 32 additions & 0 deletions src/factory/ingredient/factory/impl/NYPizzaIngredientFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package factory.ingredient.factory.impl;

import factory.ingredient.factory.PizzaIngredientFactory;
import factory.ingredient.ingredients.*;
import factory.ingredient.ingredients.impl.*;

public class NYPizzaIngredientFactory implements PizzaIngredientFactory {

public Dough createDough() {
return new ThinCrustDough();
}

public Sauce createSauce() {
return new MarinaraSauce();
}

public Cheese createCheese() {
return new ReggianoCheese();
}

public Veggies[] createVeggies() {
return new Veggies[]{ new Garlic(), new Onion(), new Mushroom(), new RedPepper() };
}

public Pepperoni createPepperoni() {
return new SlicedPepperoni();
}

public Clams createClam() {
return new FreshClams();
}
}
5 changes: 5 additions & 0 deletions src/factory/ingredient/ingredients/Cheese.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory.ingredient.ingredients;

public interface Cheese {
public String toString();
}
5 changes: 5 additions & 0 deletions src/factory/ingredient/ingredients/Clams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory.ingredient.ingredients;

public interface Clams {
public String toString();
}
5 changes: 5 additions & 0 deletions src/factory/ingredient/ingredients/Dough.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory.ingredient.ingredients;

public interface Dough {
public String toString();
}
5 changes: 5 additions & 0 deletions src/factory/ingredient/ingredients/Pepperoni.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory.ingredient.ingredients;

public interface Pepperoni {
public String toString();
}
5 changes: 5 additions & 0 deletions src/factory/ingredient/ingredients/Sauce.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory.ingredient.ingredients;

public interface Sauce {
public String toString();
}
5 changes: 5 additions & 0 deletions src/factory/ingredient/ingredients/Veggies.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory.ingredient.ingredients;

public interface Veggies {
public String toString();
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/BlackOlives.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class BlackOlives implements Veggies {

public String toString() {
return "Black Olives";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/Eggplant.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class Eggplant implements Veggies {

public String toString() {
return "Eggplant";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/FreshClams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Clams;

public class FreshClams implements Clams {

public String toString() {
return "Fresh Clams from Long Island Sound";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/FrozenClams.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Clams;

public class FrozenClams implements Clams {

public String toString() {
return "Frozen Clams from Chesapeake Bay";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/Garlic.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class Garlic implements Veggies {

public String toString() {
return "Garlic";
}
}
9 changes: 9 additions & 0 deletions src/factory/ingredient/ingredients/impl/MarinaraSauce.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Sauce;

public class MarinaraSauce implements Sauce {
public String toString() {
return "Marinara Sauce";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/MozzarellaCheese.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Cheese;

public class MozzarellaCheese implements Cheese {

public String toString() {
return "Shredded Mozzarella";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/Mushroom.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class Mushroom implements Veggies {

public String toString() {
return "Mushrooms";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/Onion.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class Onion implements Veggies {

public String toString() {
return "Onion";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/ParmesanCheese.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Cheese;

public class ParmesanCheese implements Cheese {

public String toString() {
return "Shredded Parmesan";
}
}
9 changes: 9 additions & 0 deletions src/factory/ingredient/ingredients/impl/PlumTomatoSauce.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Sauce;

public class PlumTomatoSauce implements Sauce {
public String toString() {
return "Tomato sauce with plum tomatoes";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/RedPepper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class RedPepper implements Veggies {

public String toString() {
return "Red Pepper";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/ReggianoCheese.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Cheese;

public class ReggianoCheese implements Cheese {

public String toString() {
return "Reggiano Cheese";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/SlicedPepperoni.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Pepperoni;

public class SlicedPepperoni implements Pepperoni {

public String toString() {
return "Sliced Pepperoni";
}
}
10 changes: 10 additions & 0 deletions src/factory/ingredient/ingredients/impl/Spinach.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Veggies;

public class Spinach implements Veggies {

public String toString() {
return "Spinach";
}
}
9 changes: 9 additions & 0 deletions src/factory/ingredient/ingredients/impl/ThickCrustDough.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Dough;

public class ThickCrustDough implements Dough {
public String toString() {
return "ThickCrust style extra thick crust dough";
}
}
9 changes: 9 additions & 0 deletions src/factory/ingredient/ingredients/impl/ThinCrustDough.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package factory.ingredient.ingredients.impl;

import factory.ingredient.ingredients.Dough;

public class ThinCrustDough implements Dough {
public String toString() {
return "Thin Crust Dough";
}
}
75 changes: 75 additions & 0 deletions src/factory/pizza/Pizza.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package factory.pizza;

import factory.ingredient.ingredients.*;

public abstract class Pizza {
protected String name;
protected Dough dough;
protected Sauce sauce;
protected Veggies[] veggies;
protected Cheese cheese;
protected Pepperoni pepperoni;
protected Clams clam;

public abstract void prepare();
Comment on lines +5 to +14
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pizza

  • 구상 생산자 클래스(ChicagoPizzaStore, NYPizzaStore)에서 만들어지는 제품 클래스(product class)이다.

팩토리 패턴

image

객체를 생성할 때 필요한 인터페이스를 만듭니다. 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. 팩토리 메소드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스에게 맡기게 됩니다.

image


public void bake() {
System.out.println("175도에서 25분 간 굽기");
}

public void cut() {
System.out.println("피자를 사선으로 자르기");
}

public void box() {
System.out.println("상자에 피자 담기");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String toString() {
StringBuilder result = new StringBuilder();
result.append("---- ").append(name).append(" ----\n");
if (dough != null) {
result.append(dough);
result.append("\n");
}
if (sauce != null) {
result.append(sauce);
result.append("\n");
}
if (cheese != null) {
result.append(cheese);
result.append("\n");
}
if (veggies != null) {
for (int i = 0; i < veggies.length; i++) {
result.append(veggies[i]);
if (i < veggies.length-1) {
result.append(", ");
}
}
result.append("\n");
}
if (clam != null) {
result.append(clam);
result.append("\n");
}
if (pepperoni != null) {
result.append(pepperoni);
result.append("\n");
}
return result.toString();
}

public enum PizzaType {
CHEESE,
PEPPERONI
}
}
Loading