diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/Beverage.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/Beverage.class new file mode 100644 index 0000000..3638df1 Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/Beverage.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ChocoCoffee.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ChocoCoffee.class new file mode 100644 index 0000000..ec36bb7 Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ChocoCoffee.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ColdCoffee.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ColdCoffee.class new file mode 100644 index 0000000..0f01573 Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ColdCoffee.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffee.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffee.class new file mode 100644 index 0000000..fd2e1ee Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffee.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithAddedCream.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithAddedCream.class new file mode 100644 index 0000000..82c37cd Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithAddedCream.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithWhippedMilk.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithWhippedMilk.class new file mode 100644 index 0000000..4ae547a Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithWhippedMilk.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/Beverage.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/Beverage.class new file mode 100644 index 0000000..072f27a Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/Beverage.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/CoffeeShop.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/CoffeeShop.class new file mode 100644 index 0000000..c17943c Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/CoffeeShop.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/coffeeShopMenu/ChocoCoffee.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/coffeeShopMenu/ChocoCoffee.class new file mode 100644 index 0000000..d8561f7 Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/coffeeShopMenu/ChocoCoffee.class differ diff --git a/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/coffeeShopMenu/CostOfAddons.class b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/coffeeShopMenu/CostOfAddons.class new file mode 100644 index 0000000..34023ed Binary files /dev/null and b/out/production/DesignPatterns/oops/decorator/coffeeShopImpl2/coffeeShopMenu/CostOfAddons.class differ diff --git a/out/production/DesignPatterns/oops/decorator/storyNotes/Note1 b/out/production/DesignPatterns/oops/decorator/storyNotes/Note1 new file mode 100644 index 0000000..6593d6a --- /dev/null +++ b/out/production/DesignPatterns/oops/decorator/storyNotes/Note1 @@ -0,0 +1,13 @@ + +[coffeeShopImpl1] : + + Beverage is an abstract parent class which has two main methods getDescription and getCost. All the child classes + inherit from that Beverage class and set its own attributes. + + You can find some items in coffeeShopMenu like ChocoCoffee, ColdCoffee, HotCoffee and couple of hundreds. + + The problem arises where suppose the prices of the coffees increase, also each item can have different configurations + like hot coffee with whipped milk or hot coffee with added cream, so there are hundreds of possible permutations. + + One intuition would be to add all these properties in the Beverage Class itself and then just set these booleans on runtime. + This approach is represented in Impl2. \ No newline at end of file diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl1/DuckOwner.class b/out/production/DesignPatterns/oops/duckFamilyImpl1/DuckOwner.class deleted file mode 100644 index db53971..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl1/DuckOwner.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl1/RubberDuck.class b/out/production/DesignPatterns/oops/duckFamilyImpl1/RubberDuck.class deleted file mode 100644 index 6f577ec..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl1/RubberDuck.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/FlyBehaviour.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/FlyBehaviour.class deleted file mode 100644 index 83e7163..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/FlyBehaviour.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/QuackBehaviour.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/QuackBehaviour.class deleted file mode 100644 index 39c8e54..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/QuackBehaviour.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/CityDuck.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/CityDuck.class deleted file mode 100644 index ce95973..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/CityDuck.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DefaultFlyingBehaviourImpl.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DefaultFlyingBehaviourImpl.class deleted file mode 100644 index dc784a7..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DefaultFlyingBehaviourImpl.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DefaultQuackBehaviourImpl.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DefaultQuackBehaviourImpl.class deleted file mode 100644 index 0be266a..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DefaultQuackBehaviourImpl.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DuckOwner.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DuckOwner.class deleted file mode 100644 index adf4889..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/DuckOwner.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/RubberDuck.class b/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/RubberDuck.class deleted file mode 100644 index d6600bc..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/RubberDuck.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl3/CanNotFlyBehaviour.class b/out/production/DesignPatterns/oops/duckFamilyImpl3/CanNotFlyBehaviour.class deleted file mode 100644 index f0e4ac7..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl3/CanNotFlyBehaviour.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl3/CityDuck.class b/out/production/DesignPatterns/oops/duckFamilyImpl3/CityDuck.class deleted file mode 100644 index 61dd352..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl3/CityDuck.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl3/Duck.class b/out/production/DesignPatterns/oops/duckFamilyImpl3/Duck.class deleted file mode 100644 index a3d9514..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl3/Duck.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl3/DuckOwner.class b/out/production/DesignPatterns/oops/duckFamilyImpl3/DuckOwner.class deleted file mode 100644 index 8d77f85..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl3/DuckOwner.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl3/RubberDuck.class b/out/production/DesignPatterns/oops/duckFamilyImpl3/RubberDuck.class deleted file mode 100644 index 91962f1..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl3/RubberDuck.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl3/SqueakBehaviour.class b/out/production/DesignPatterns/oops/duckFamilyImpl3/SqueakBehaviour.class deleted file mode 100644 index 6753a71..0000000 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl3/SqueakBehaviour.class and /dev/null differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl1/Duck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/Duck.class similarity index 63% rename from out/production/DesignPatterns/oops/duckFamilyImpl1/Duck.class rename to out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/Duck.class index ce08329..76b8496 100644 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl1/Duck.class and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/Duck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/DuckOwner.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/DuckOwner.class new file mode 100644 index 0000000..adf1654 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/DuckOwner.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/RubberDuck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/RubberDuck.class new file mode 100644 index 0000000..0257fd3 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl1/RubberDuck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/FlyBehaviour.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/FlyBehaviour.class new file mode 100644 index 0000000..e6e26d2 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/FlyBehaviour.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/QuackBehaviour.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/QuackBehaviour.class new file mode 100644 index 0000000..7bc850f Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/QuackBehaviour.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/CityDuck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/CityDuck.class new file mode 100644 index 0000000..de1241f Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/CityDuck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DefaultFlyingBehaviourImpl.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DefaultFlyingBehaviourImpl.class new file mode 100644 index 0000000..dd4ceff Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DefaultFlyingBehaviourImpl.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DefaultQuackBehaviourImpl.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DefaultQuackBehaviourImpl.class new file mode 100644 index 0000000..6bb4c56 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DefaultQuackBehaviourImpl.class differ diff --git a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/Duck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/Duck.class similarity index 50% rename from out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/Duck.class rename to out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/Duck.class index 45db691..b1450cc 100644 Binary files a/out/production/DesignPatterns/oops/duckFamilyImpl2/behaviours/ducks/Duck.class and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/Duck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DuckOwner.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DuckOwner.class new file mode 100644 index 0000000..f6cf3aa Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/DuckOwner.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/RubberDuck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/RubberDuck.class new file mode 100644 index 0000000..a961a92 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl2/behaviours/ducks/RubberDuck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/CanNotFlyBehaviour.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/CanNotFlyBehaviour.class new file mode 100644 index 0000000..ccb1c97 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/CanNotFlyBehaviour.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/CityDuck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/CityDuck.class new file mode 100644 index 0000000..40e185e Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/CityDuck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/Duck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/Duck.class new file mode 100644 index 0000000..8614fa8 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/Duck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/DuckOwner.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/DuckOwner.class new file mode 100644 index 0000000..5f31ee8 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/DuckOwner.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/RubberDuck.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/RubberDuck.class new file mode 100644 index 0000000..0070751 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/RubberDuck.class differ diff --git a/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/SqueakBehaviour.class b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/SqueakBehaviour.class new file mode 100644 index 0000000..b401ef3 Binary files /dev/null and b/out/production/DesignPatterns/oops/strategy/duckFamily/duckFamilyImpl3/SqueakBehaviour.class differ diff --git a/out/production/DesignPatterns/oops/storyNotes/Note1 b/out/production/DesignPatterns/oops/strategy/duckFamily/storyNotes/Note1 similarity index 100% rename from out/production/DesignPatterns/oops/storyNotes/Note1 rename to out/production/DesignPatterns/oops/strategy/duckFamily/storyNotes/Note1 diff --git a/out/production/DesignPatterns/oops/storyNotes/Note2 b/out/production/DesignPatterns/oops/strategy/duckFamily/storyNotes/Note2 similarity index 100% rename from out/production/DesignPatterns/oops/storyNotes/Note2 rename to out/production/DesignPatterns/oops/strategy/duckFamily/storyNotes/Note2 diff --git a/out/production/DesignPatterns/oops/storyNotes/Note3 b/out/production/DesignPatterns/oops/strategy/duckFamily/storyNotes/Note3 similarity index 100% rename from out/production/DesignPatterns/oops/storyNotes/Note3 rename to out/production/DesignPatterns/oops/strategy/duckFamily/storyNotes/Note3 diff --git a/src/oops/decorator/coffeeShopImpl1/Beverage.java b/src/oops/decorator/coffeeShopImpl1/Beverage.java new file mode 100644 index 0000000..5268b69 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl1/Beverage.java @@ -0,0 +1,22 @@ +package oops.decorator.coffeeShopImpl1; + +abstract public class Beverage { + private String description; + private Integer cost; + + public String getDescription() { + return description; + } + + public Integer getCost() { + return cost; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setCost(Integer cost) { + this.cost = cost; + } +} \ No newline at end of file diff --git a/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ChocoCoffee.java b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ChocoCoffee.java new file mode 100644 index 0000000..9adb2e1 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ChocoCoffee.java @@ -0,0 +1,10 @@ +package oops.decorator.coffeeShopImpl1.coffeeShopMenu; + +import oops.decorator.coffeeShopImpl1.Beverage; + +public class ChocoCoffee extends Beverage { + public ChocoCoffee() { + super.setCost(300); + super.setDescription("Choco Coffee!!"); + } +} diff --git a/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ColdCoffee.java b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ColdCoffee.java new file mode 100644 index 0000000..889e88d --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/ColdCoffee.java @@ -0,0 +1,11 @@ +package oops.decorator.coffeeShopImpl1.coffeeShopMenu; + +import oops.decorator.coffeeShopImpl1.Beverage; + +public class ColdCoffee extends Beverage { + + public ColdCoffee() { + super.setCost(200); + super.setDescription("Cold Coffee!!"); + } +} diff --git a/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffee.java b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffee.java new file mode 100644 index 0000000..06f9d38 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffee.java @@ -0,0 +1,12 @@ +package oops.decorator.coffeeShopImpl1.coffeeShopMenu; + +import oops.decorator.coffeeShopImpl1.Beverage; + +public class HotCoffee extends Beverage { + + public HotCoffee() { + super.setCost(100); + super.setDescription("Hot Coffee!!"); + } + +} diff --git a/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithAddedCream.java b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithAddedCream.java new file mode 100644 index 0000000..bdabed1 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithAddedCream.java @@ -0,0 +1,14 @@ +package oops.decorator.coffeeShopImpl1.coffeeShopMenu; + +import oops.decorator.coffeeShopImpl1.Beverage; + +public class HotCoffeeWithAddedCream extends Beverage { + + public HotCoffeeWithAddedCream() { + Integer hotCoffeeCost = super.getCost(); + Integer addedCreamCost = 100; + super.setCost(hotCoffeeCost + addedCreamCost); + + super.setDescription("Hot Coffee with added cream!!"); + } +} diff --git a/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithWhippedMilk.java b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithWhippedMilk.java new file mode 100644 index 0000000..15ee719 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl1/coffeeShopMenu/HotCoffeeWithWhippedMilk.java @@ -0,0 +1,13 @@ +package oops.decorator.coffeeShopImpl1.coffeeShopMenu; + +import oops.decorator.coffeeShopImpl1.Beverage; + +public class HotCoffeeWithWhippedMilk extends HotCoffee { + public HotCoffeeWithWhippedMilk() { + Integer hotCoffeeCost = super.getCost(); + Integer costOfWhippedMilk = 50; + super.setCost(hotCoffeeCost + costOfWhippedMilk); + + super.setDescription("Hot Coffee with whipped milk!!"); + } +} diff --git a/src/oops/decorator/coffeeShopImpl2/Beverage.java b/src/oops/decorator/coffeeShopImpl2/Beverage.java new file mode 100644 index 0000000..39f4e46 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl2/Beverage.java @@ -0,0 +1,80 @@ +package oops.decorator.coffeeShopImpl2; + +import oops.decorator.coffeeShopImpl2.coffeeShopMenu.CostOfAddons; + +abstract public class Beverage { + + private String description; + private Integer cost = 0; + private Integer costOfProperties = 0; + + public void setDescription(String description) { + this.description = description; + } + + public void setCost(Integer cost) { + this.cost = cost; + } + + public String getDescription() { + return description; + } + + public Integer getTotalCost() { + return cost + costOfProperties; + } + + public Integer getCostOfProperties() { + return costOfProperties; + } + + public void notifyPropertiesChanged() { + calculateCostOfProperties(); + } + + private void calculateCostOfProperties() { + costOfProperties = 0; + + if (mocha) { + costOfProperties += CostOfAddons.mocha; + } + + if (choco) { + costOfProperties += CostOfAddons.choco; + } + + if (cream) { + costOfProperties += CostOfAddons.cream; + } + + if (whippedMilk) { + costOfProperties += CostOfAddons.whippedMilk; + } + + // ... and so on + } + + ////////// Beverage Properties ////////// + + private Boolean mocha = false; + private Boolean choco = false; + private Boolean cream = false; + private Boolean whippedMilk = false; + // and 100s of such properties.. + + public void setMocha(Boolean mocha) { + this.mocha = mocha; + } + + public void setChoco(Boolean choco) { + this.choco = choco; + } + + public void setCream(Boolean cream) { + this.cream = cream; + } + + public void setWhippedMilk(Boolean whippedMilk) { + this.whippedMilk = whippedMilk; + } +} diff --git a/src/oops/decorator/coffeeShopImpl2/CoffeeShop.java b/src/oops/decorator/coffeeShopImpl2/CoffeeShop.java new file mode 100644 index 0000000..cd60eb1 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl2/CoffeeShop.java @@ -0,0 +1,24 @@ +package oops.decorator.coffeeShopImpl2; + +import oops.decorator.coffeeShopImpl2.coffeeShopMenu.ChocoCoffee; + +public class CoffeeShop { + public static void main(String[] args) { + Beverage coffee = new ChocoCoffee(); + + System.out.println(coffee.getTotalCost()); + + // dynamically setting the addons + + coffee.setMocha(true); + coffee.setChoco(true); + coffee.notifyPropertiesChanged(); + + System.out.println(coffee.getTotalCost()); + + coffee.setCream(true); + coffee.notifyPropertiesChanged(); + + System.out.println(coffee.getTotalCost()); + } +} diff --git a/src/oops/decorator/coffeeShopImpl2/coffeeShopMenu/ChocoCoffee.java b/src/oops/decorator/coffeeShopImpl2/coffeeShopMenu/ChocoCoffee.java new file mode 100644 index 0000000..031b87a --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl2/coffeeShopMenu/ChocoCoffee.java @@ -0,0 +1,11 @@ +package oops.decorator.coffeeShopImpl2.coffeeShopMenu; + +import oops.decorator.coffeeShopImpl2.Beverage; + +public class ChocoCoffee extends Beverage { + + public ChocoCoffee() { + super.setCost(100); + super.setDescription("Choco Coffee!!"); + } +} diff --git a/src/oops/decorator/coffeeShopImpl2/coffeeShopMenu/CostOfAddons.java b/src/oops/decorator/coffeeShopImpl2/coffeeShopMenu/CostOfAddons.java new file mode 100644 index 0000000..5ba0379 --- /dev/null +++ b/src/oops/decorator/coffeeShopImpl2/coffeeShopMenu/CostOfAddons.java @@ -0,0 +1,8 @@ +package oops.decorator.coffeeShopImpl2.coffeeShopMenu; + +public interface CostOfAddons { + Integer mocha = 10; + Integer choco = 20; + Integer cream = 30; + Integer whippedMilk = 30; +} diff --git a/src/oops/decorator/storyNotes/Note1 b/src/oops/decorator/storyNotes/Note1 new file mode 100644 index 0000000..6593d6a --- /dev/null +++ b/src/oops/decorator/storyNotes/Note1 @@ -0,0 +1,13 @@ + +[coffeeShopImpl1] : + + Beverage is an abstract parent class which has two main methods getDescription and getCost. All the child classes + inherit from that Beverage class and set its own attributes. + + You can find some items in coffeeShopMenu like ChocoCoffee, ColdCoffee, HotCoffee and couple of hundreds. + + The problem arises where suppose the prices of the coffees increase, also each item can have different configurations + like hot coffee with whipped milk or hot coffee with added cream, so there are hundreds of possible permutations. + + One intuition would be to add all these properties in the Beverage Class itself and then just set these booleans on runtime. + This approach is represented in Impl2. \ No newline at end of file