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