Burgers

Report a typo

This task will demonstrate that the Abstract factory is an abstraction over the Simple factory design pattern. The task is about writing your own factories: BurgerKingIngredientFactory and McDonIngredientFactory. Moreover, you should write Burger subclasses code.

The real situation of this task is about ordering burgers in your cafe where you can provide Hamburger, Cheeseburger and VeganBurger either McDonald's or BurgerKing style.

Sample Input 1:

Sample Output 1:

-Hello, one McDonalds style cheeseburger
-Okay! Please wait for a sec, -Calling to the McDonaldsStore. -Cheeseburger
--- Making a McDonalds Style Cheeseburger ----
Collecting McDonalds Style Cheeseburger
Placing in official McDonalds Box
There it is!
McDonalds Style Cheeseburger

-Hello, one BurgerKing style hamburger
-Okay! Please wait for a sec, -Calling to the BurgerKingStore. -Hamburger"
--- Making a BurgerKing Style Hamburger ----
Collecting BurgerKing Style Hamburger
Placing in official BurgerKing Box
There it is!
BurgerKing Style Hamburger
Write a program in Java 17
class TestDrive {
public static void main(String[] args) throws InterruptedException {
BurgerStore mcDonalds = /* write your code here */
BurgerStore burgerKing = /* write your code here */

Burger burger;

System.out.println("-Hello, one McDonalds style cheeseburger");
System.out.println("-Okay! Please wait for a sec, -Calling to the McDonaldsStore. -Cheeseburger");
burger = mcDonalds.orderBurger(Burger.CHEESE);
Thread.sleep(1500);
System.out.println("There it is!");
System.out.println(burger.getName() + "\n");

System.out.println("-Hello, one BurgerKing style hamburger");
System.out.println("-Okay! Please wait for a sec, -Calling to the BurgerKingStore. -Hamburger\"");
burger = burgerKing.orderBurger(Burger.HAMBURGER);
Thread.sleep(1500);
System.out.println("There it is!");
System.out.println(burger.getName());
}
}

abstract class BurgerStore {

protected abstract Burger createBurger(String type);

Burger orderBurger(String type) {
Burger burger = createBurger(type);
System.out.println("--- Making a " + burger.getName() + " ----");
burger.collect();
burger.placeInBox();
return burger;
}
}

class McDonStore extends BurgerStore {
@Override
protected Burger createBurger(String type) {
Burger burger = null;
BurgerIngredientFactory ingredientFactory = /* write your code here */

switch (type) {
case Burger.CHEESE :
burger = /* write your code here */
burger.setName("McDonalds Style Cheeseburger");
break;
case Burger.VEGAN :
burger = /* write your code here */
burger.setName("McDonalds Style VeganBurger");
break;
default:
burger = /* write your code here */
burger.setName("McDonalds Style Hamburger");
break;
}

if (burger != null) {
burger.setBox("McDonalds Box");
}

return burger;
}
}

class BurgerKingStore extends BurgerStore {
@Override
protected Burger createBurger(String type) {
Burger burger = null;
BurgerIngredientFactory ingredientFactory = /* write your code here */

switch (type) {
case Burger.CHEESE :
burger = /* write your code here */
burger.setName("BurgerKing Style Cheeseburger");
break;
case Burger.VEGAN :
burger = /* write your code here */
burger.setName("BurgerKing Style VeganBurger");
break;
default:
burger = /* write your code here */
burger.setName("BurgerKing Style Hamburger");
break;
}

if (burger != null) {
burger.setBox("BurgerKing Box");
}

return burger;
}
}

interface BurgerIngredientFactory {
Bun createBun();

Cheese createCheese();

Cutlet createCutlet();

Sauce createSauce();
}

class McDonIngredientFactory implements BurgerIngredientFactory {
@Override
public Bun createBun() {
return /* write your code here */
}

@Override
public Cheese createCheese() {
return /* write your code here */
}

@Override
public Cutlet createCutlet() {
return /* write your code here */
}

@Override
public Sauce createSauce() {
return /* write your code here */
}
}

class BurgerKingIngredientFactory implements BurgerIngredientFactory {
@Override
public Bun createBun() {
return /* write your code here */
}

@Override
public Cheese createCheese() {
return /* write your code here */
}

@Override
public Cutlet createCutlet() {
return /* write your code here */
}

@Override
public Sauce createSauce() {
return /* write your code here */
}
}

abstract class Burger {
static final String CHEESE = "cheese";
static final String HAMBURGER = "hamburger";
static final String VEGAN = "vegan";

String box;
String name;
Bun bun;
Cutlet cutlet;
Sauce sauce;
Cheese cheese;

abstract void collect();

void placeInBox() {
if (box != null) {
System.out.println("Placing in official " + box);
} else {
System.out.println("Placing in official BurgerStore box");
}
}

String getName() {
return name;
}

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

void setBox(String box) {
this.box = box;
}

@Override
public String toString() {
StringBuilder result = new StringBuilder();
result.append("---- ").append(name).append(" ----\n");
if (bun != null) {
result.append(bun);
result.append("\n");
}
if (cutlet != null) {
result.append(cutlet);
result.append("\n");
}
if (sauce != null) {
result.append(sauce);
result.append("\n");
}
if (cheese != null) {
result.append(cheese);
result.append("\n");
}
return result.toString();
}
}

class Cheeseburger extends Burger {
BurgerIngredientFactory ingredientFactory;

Cheeseburger(BurgerIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}

@Override
void collect() {
System.out.println("Collecting " + name);
bun = ingredientFactory.createBun();
cheese = ingredientFactory.createCheese();
cutlet = ingredientFactory.createCutlet();
sauce = ingredientFactory.createSauce();
}
}

class Hamburger extends Burger {
BurgerIngredientFactory ingredientFactory;

Hamburger(BurgerIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}

@Override
void collect() {
System.out.println("Collecting " + name);
bun = ingredientFactory.createBun();
cutlet = ingredientFactory.createCutlet();
sauce = ingredientFactory.createSauce();
}
}

class VeganBurger extends Burger {
BurgerIngredientFactory ingredientFactory;

VeganBurger(BurgerIngredientFactory ingredientFactory) {
this.ingredientFactory = ingredientFactory;
}

@Override
void collect() {
System.out.println("Collecting " + name);
bun = ingredientFactory.createBun();
sauce = ingredientFactory.createSauce();
}
}

interface Bun {
String toString();
}

class McDonBun implements Bun {
public String toString() {
return "McDonalds Bun";
}
}

class BurgerKingBun implements Bun {
public String toString() {
return "BurgerKing Bun";
}
}

interface Cheese {
String toString();
}

class McDonCheese implements Cheese {
public String toString() {
return "McDonalds Cheese";
}
}

class BurgerKingCheese implements Cheese {
public String toString() {
return "BurgerKing Cheese";
}
}

interface Cutlet {
String toString();
}

class McDonCutlet implements Cutlet {
public String toString() {
return "McDonalds Cutlet";
}
}

class BurgerKingCutlet implements Cutlet {
public String toString() {
return "BurgerKing Cutlet";
}
}

interface Sauce {
String toString();
}

class McDonSauce implements Sauce {
public String toString() {
return "McDonalds Sauce";
}
}

class BurgerKingSauce implements Sauce {
public String toString() {
return "BurgerKing Sauce";
}
}
___

Create a free account to access the full topic