First commit of the cupcake kata. The toppings are implemented
This commit is contained in:
30
.gitignore
vendored
Normal file
30
.gitignore
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
### IntelliJ IDEA ###
|
||||
.idea/
|
||||
out/
|
||||
!**/src/main/**/out/
|
||||
!**/src/test/**/out/
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
bin/
|
||||
!**/src/main/**/bin/
|
||||
!**/src/test/**/bin/
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
||||
19
src/Application.java
Normal file
19
src/Application.java
Normal file
@@ -0,0 +1,19 @@
|
||||
import cupcake.*;
|
||||
import views.CupcakeView;
|
||||
|
||||
public class Application {
|
||||
|
||||
public void run() {
|
||||
Cupcake cupcake1 = new Cupcake();
|
||||
Cupcake cupcake2 = new Cupcake();
|
||||
|
||||
CupcakeDecorator decorator1 = new NutsCupcakeDecorator(new BlackChocolateCupcakeDecorator(cupcake1));
|
||||
CupcakeDecorator decorator2 = new SugarCupcakeDecorator(new NutsCupcakeDecorator(new BlackChocolateCupcakeDecorator(new SugarCupcakeDecorator(cupcake2))));
|
||||
|
||||
CupcakeView.displayCupcakeToppings(decorator1);
|
||||
CupcakeView.displayCupcakePrice(decorator1);
|
||||
|
||||
CupcakeView.displayCupcakeToppings(decorator2);
|
||||
CupcakeView.displayCupcakePrice(decorator2);
|
||||
}
|
||||
}
|
||||
5
src/Main.java
Normal file
5
src/Main.java
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
void main(String[] args) {
|
||||
var app = new Application();
|
||||
app.run();
|
||||
}
|
||||
15
src/cupcake/BlackChocolateCupcakeDecorator.java
Normal file
15
src/cupcake/BlackChocolateCupcakeDecorator.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package cupcake;
|
||||
|
||||
import toppings.BlackChocolateTopping;
|
||||
|
||||
public class BlackChocolateCupcakeDecorator extends CupcakeDecorator {
|
||||
public BlackChocolateCupcakeDecorator(Cupcake cupcake) {
|
||||
super(cupcake);
|
||||
cupcake.addTopping(new BlackChocolateTopping());
|
||||
}
|
||||
|
||||
public BlackChocolateCupcakeDecorator(CupcakeDecorator cupcakeDecorator) {
|
||||
super(cupcakeDecorator);
|
||||
cupcake.addTopping(new BlackChocolateTopping());
|
||||
}
|
||||
}
|
||||
54
src/cupcake/Cupcake.java
Normal file
54
src/cupcake/Cupcake.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package cupcake;
|
||||
|
||||
import toppings.Topping;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Cupcake {
|
||||
private final List<Topping> toppings;
|
||||
|
||||
public Cupcake() {
|
||||
this.toppings = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addTopping(Topping topping) {
|
||||
toppings.add(topping);
|
||||
}
|
||||
|
||||
public String getToppingsNames() {
|
||||
// TODO: refactor this method to reduce the complexity
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
if (!toppings.isEmpty())
|
||||
builder.append(toppings.getFirst().getName());
|
||||
else
|
||||
return "";
|
||||
|
||||
if (toppings.size() >= 2)
|
||||
builder.append(" with ")
|
||||
.append(toppings.get(1).getName());
|
||||
|
||||
for (int i = 2; i < toppings.size(); i++) {
|
||||
Topping topping = toppings.get(i);
|
||||
|
||||
if (i == toppings.size() - 1) {
|
||||
builder.append(" and ")
|
||||
.append(topping.getName());
|
||||
} else {
|
||||
builder.append(", ")
|
||||
.append(topping.getName());
|
||||
}
|
||||
}
|
||||
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
public double computePrice() {
|
||||
double cupcakePrice = 0.0d;
|
||||
for (final Topping topping : toppings) {
|
||||
cupcakePrice += topping.getPrice();
|
||||
}
|
||||
return cupcakePrice;
|
||||
}
|
||||
}
|
||||
21
src/cupcake/CupcakeDecorator.java
Normal file
21
src/cupcake/CupcakeDecorator.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package cupcake;
|
||||
|
||||
public abstract class CupcakeDecorator {
|
||||
protected Cupcake cupcake;
|
||||
|
||||
public CupcakeDecorator(Cupcake cupcake) {
|
||||
this.cupcake = cupcake;
|
||||
}
|
||||
|
||||
public CupcakeDecorator(CupcakeDecorator cupcakeDecorator) {
|
||||
this.cupcake = cupcakeDecorator.cupcake;
|
||||
}
|
||||
|
||||
public double computePrice() {
|
||||
return cupcake.computePrice();
|
||||
}
|
||||
|
||||
public String getToppingsNames() {
|
||||
return cupcake.getToppingsNames();
|
||||
}
|
||||
}
|
||||
15
src/cupcake/NutsCupcakeDecorator.java
Normal file
15
src/cupcake/NutsCupcakeDecorator.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package cupcake;
|
||||
|
||||
import toppings.NutsTopping;
|
||||
|
||||
public class NutsCupcakeDecorator extends CupcakeDecorator {
|
||||
public NutsCupcakeDecorator(Cupcake cupcake) {
|
||||
super(cupcake);
|
||||
cupcake.addTopping(new NutsTopping());
|
||||
}
|
||||
|
||||
public NutsCupcakeDecorator(CupcakeDecorator cupcakeDecorator) {
|
||||
super(cupcakeDecorator);
|
||||
cupcakeDecorator.cupcake.addTopping(new NutsTopping());
|
||||
}
|
||||
}
|
||||
15
src/cupcake/SugarCupcakeDecorator.java
Normal file
15
src/cupcake/SugarCupcakeDecorator.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package cupcake;
|
||||
|
||||
import toppings.SugarTopping;
|
||||
|
||||
public class SugarCupcakeDecorator extends CupcakeDecorator {
|
||||
public SugarCupcakeDecorator(Cupcake cupcake) {
|
||||
super(cupcake);
|
||||
cupcake.addTopping(new SugarTopping());
|
||||
}
|
||||
|
||||
public SugarCupcakeDecorator(CupcakeDecorator cupcakeDecorator) {
|
||||
super(cupcakeDecorator);
|
||||
cupcakeDecorator.cupcake.addTopping(new SugarTopping());
|
||||
}
|
||||
}
|
||||
7
src/toppings/BlackChocolateTopping.java
Normal file
7
src/toppings/BlackChocolateTopping.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package toppings;
|
||||
|
||||
public class BlackChocolateTopping extends Topping {
|
||||
public BlackChocolateTopping() {
|
||||
super("black chocolate", 0.50d);
|
||||
}
|
||||
}
|
||||
7
src/toppings/NutsTopping.java
Normal file
7
src/toppings/NutsTopping.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package toppings;
|
||||
|
||||
public class NutsTopping extends Topping {
|
||||
public NutsTopping() {
|
||||
super("nuts", 0.75d);
|
||||
}
|
||||
}
|
||||
7
src/toppings/SugarTopping.java
Normal file
7
src/toppings/SugarTopping.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package toppings;
|
||||
|
||||
public class SugarTopping extends Topping {
|
||||
public SugarTopping() {
|
||||
super("sugar", 0.12d);
|
||||
}
|
||||
}
|
||||
19
src/toppings/Topping.java
Normal file
19
src/toppings/Topping.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package toppings;
|
||||
|
||||
public abstract class Topping {
|
||||
protected final String name;
|
||||
protected final double price;
|
||||
|
||||
public Topping(String name, double type) {
|
||||
this.name = name;
|
||||
this.price = type;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public double getPrice() {
|
||||
return price;
|
||||
}
|
||||
}
|
||||
19
src/views/CupcakeView.java
Normal file
19
src/views/CupcakeView.java
Normal file
@@ -0,0 +1,19 @@
|
||||
package views;
|
||||
|
||||
import cupcake.CupcakeDecorator;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
public class CupcakeView {
|
||||
public static void displayCupcakeToppings(CupcakeDecorator cupcakeDecorator) {
|
||||
System.out.println("Cupcake with : " + cupcakeDecorator.getToppingsNames());
|
||||
}
|
||||
|
||||
public static void displayCupcakePrice(CupcakeDecorator cupcakeDecorator) {
|
||||
double price = cupcakeDecorator.computePrice();
|
||||
DecimalFormat fd = new DecimalFormat("0.00€");
|
||||
String formattedPrice = fd.format(price);
|
||||
|
||||
System.out.println(formattedPrice);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user