class Main {
public static void main(String[] args) {
MenuDirector menuDirector;
Menu menu;
menuDirector = new MenuDirector(new ItalianMenuBuilder());
menuDirector.buildMenu();
menu = menuDirector.getMenu();
System.out.println("menu is " + menu);
menuDirector = new MenuDirector(new JapaneseMenuBuilder());
menuDirector.buildMenu();
menu = menuDirector.getMenu();
System.out.println("menu is " + menu);
}
}
public class MenuDirector {
private MenuBuilder menuBuilder;
public MenuDirector(MenuBuilder menuBuilder) {
this.menuBuilder = menuBuilder;
}
public void buildMenu() {
this.menuBuilder.createMenu();
this.menuBuilder.buildDrink();
this.menuBuilder.buildMainCourse();
this.menuBuilder.buildSide();
}
public Menu getMenu() {
return this.menuBuilder.getMenu();
}
}
public abstract class MenuBuilder
{
private Menu menu;
public void createMenu()
{
menu = new Menu();
}
public abstract void buildDrink();
public abstract void buildMainCourse();
public abstract void buildSide();
public Menu getMenu() {
return menu;
}
}
public class Menu {
private String drink;
private String mainCourse;
private String side;
public String getDrink() {
return drink;
}
public void setDrink(String drink) {
this.drink = drink;
}
public String getMainCourse() {
return mainCourse;
}
public void setMainCourse(String mainCourse) {
this.mainCourse = mainCourse;
}
public String getSide() {
return side;
}
public void setSide(String side) {
this.side = side;
}
public String toString() {
return "drink:" + drink + ", main course:" + mainCourse + ", side:" + side;
}
}
public class JapaneseMenuBuilder extends MenuBuilder {
@Override
public void buildDrink()
{
getMenu().setDrink("sake");
}
@Override
public void buildMainCourse()
{
getMenu().setMainCourse("Sushi");
}
@Override
public void buildSide()
{
getMenu().setSide("mosi");
}
}
public class ItalianMenuBuilder extends MenuBuilder {
@Override
public void buildDrink()
{
getMenu().setDrink("red Wine");
}
@Override
public void buildMainCourse()
{
getMenu().setMainCourse("Spaghetti");
}
@Override
public void buildSide()
{
getMenu().setSide("bread");
}
}