From 116e9b12a5ca5f9d5b8e249b195eaa3e20d59d2e Mon Sep 17 00:00:00 2001 From: MarceluitNL Date: Sun, 18 Apr 2021 19:08:41 +0200 Subject: [PATCH] Refactored with Polymorphism. Thinking Loterijen uses own proprietary software --- .../main/java/com/gildedrose/AgedBrie.java | 28 ++++++++++ .../java/com/gildedrose/AgedBrieStategy.java | 23 ++++++++ .../java/com/gildedrose/BackStagePass.java | 45 ++++++++++++++++ .../main/java/com/gildedrose/GildedRose.java | 52 ++----------------- Java/src/main/java/com/gildedrose/Item.java | 6 +++ .../java/com/gildedrose/ItemStrategy.java | 5 ++ .../main/java/com/gildedrose/Sulfuras.java | 13 +++++ .../java/com/gildedrose/GildedRoseTest.java | 6 +-- .../test/java/com/gildedrose/TestItems.java | 31 +++++++++++ .../java/com/gildedrose/TexttestFixture.java | 37 ------------- 10 files changed, 157 insertions(+), 89 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/AgedBrie.java create mode 100644 Java/src/main/java/com/gildedrose/AgedBrieStategy.java create mode 100644 Java/src/main/java/com/gildedrose/BackStagePass.java create mode 100644 Java/src/main/java/com/gildedrose/ItemStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/Sulfuras.java create mode 100644 Java/src/test/java/com/gildedrose/TestItems.java delete mode 100644 Java/src/test/java/com/gildedrose/TexttestFixture.java diff --git a/Java/src/main/java/com/gildedrose/AgedBrie.java b/Java/src/main/java/com/gildedrose/AgedBrie.java new file mode 100644 index 00000000..58b6bb90 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/AgedBrie.java @@ -0,0 +1,28 @@ +package com.gildedrose; + +public class AgedBrie extends Item { + + + + public AgedBrie(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public Item updateQuality(Item item) { + int newQuality = sellByDayPassed(item) ? item.quality + 2 : item.quality + 1; + + if(isQualityGreaterThanFifty(newQuality)) { + newQuality = 50; + } + + return new AgedBrie(item.name, item.sellIn - 1, newQuality); + } + + private boolean sellByDayPassed(Item item) { + return item.sellIn < 1; + } + + private boolean isQualityGreaterThanFifty(int newQuality) { + return newQuality > 50; + } +} diff --git a/Java/src/main/java/com/gildedrose/AgedBrieStategy.java b/Java/src/main/java/com/gildedrose/AgedBrieStategy.java new file mode 100644 index 00000000..31bde1d1 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/AgedBrieStategy.java @@ -0,0 +1,23 @@ +package com.gildedrose; + +public class AgedBrieStategy implements ItemStrategy { + + @Override + public Item updateItem(Item item) { + int newQuality = sellByDayPassed(item) ? item.quality + 2 : item.quality + 1; + + if(isQualityGreaterThanFifty(newQuality)) { + newQuality = 50; + } + + return new Item(item.name, item.sellIn - 1, newQuality); + } + + private boolean sellByDayPassed(Item item) { + return item.sellIn < 1; + } + + private boolean isQualityGreaterThanFifty(int newQuality) { + return newQuality > 50; + } +} diff --git a/Java/src/main/java/com/gildedrose/BackStagePass.java b/Java/src/main/java/com/gildedrose/BackStagePass.java new file mode 100644 index 00000000..1ad31257 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/BackStagePass.java @@ -0,0 +1,45 @@ +package com.gildedrose; + +public class BackStagePass extends Item { +// "Sulfuras", being a legendary item, never has to be sold or decreases in Quality + int newQuality = 0; + + public BackStagePass(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public Item updateQuality(Item item) { + + if (noSellin(item)) { + newQuality = 0; + } else if (sellin5DaysOrLess(item) ) { + newQuality = newQuality + 3; + } else if (sellin10DaysOrLess(item)) { + newQuality = newQuality + 2; + } else { + newQuality = newQuality + 1; + } + + if (QualtyGT50(item)) { + newQuality = 50; + } + return new BackStagePass(item.name, item.sellIn - 1, newQuality); + } + + private boolean QualtyGT50(Item item) { + return newQuality > 50; + } + + private boolean sellin10DaysOrLess(Item item) { + // TODO Auto-generated method stub + return item.sellIn < 11; + } + + private boolean sellin5DaysOrLess(Item item) { + return item.sellIn < 6; + } + + private boolean noSellin(Item item) { + return item.sellIn < 1; + } + } diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e6feb751..3195202c 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,7 +1,7 @@ package com.gildedrose; class GildedRose { - Item[] items; + public Item[] items; public GildedRose(Item[] items) { this.items = items; @@ -9,54 +9,8 @@ class GildedRose { public void updateQuality() { for (int i = 0; i < items.length; i++) { - if (!items[i].name.equals("Aged Brie") - && !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].quality > 0) { - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].quality = items[i].quality - 1; - } - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - - if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].sellIn < 11) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - - if (items[i].sellIn < 6) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } - } - } - - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].sellIn = items[i].sellIn - 1; - } - - if (items[i].sellIn < 0) { - if (!items[i].name.equals("Aged Brie")) { - if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (items[i].quality > 0) { - if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { - items[i].quality = items[i].quality - 1; - } - } - } else { - items[i].quality = items[i].quality - items[i].quality; - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } + System.out.println(items[i].getClass()); + items[i] = items[i].updateQuality(items[i]); } } } \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/Item.java b/Java/src/main/java/com/gildedrose/Item.java index 465729ec..2886c7a9 100644 --- a/Java/src/main/java/com/gildedrose/Item.java +++ b/Java/src/main/java/com/gildedrose/Item.java @@ -14,6 +14,12 @@ public class Item { this.quality = quality; } + public Item updateQuality(Item item) { + System.out.println("Unkown item : " + item.name); + return item; + + } + @Override public String toString() { return this.name + ", " + this.sellIn + ", " + this.quality; diff --git a/Java/src/main/java/com/gildedrose/ItemStrategy.java b/Java/src/main/java/com/gildedrose/ItemStrategy.java new file mode 100644 index 00000000..1c6d18c5 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ItemStrategy.java @@ -0,0 +1,5 @@ +package com.gildedrose; + +public interface ItemStrategy { + Item updateItem(Item item); +} diff --git a/Java/src/main/java/com/gildedrose/Sulfuras.java b/Java/src/main/java/com/gildedrose/Sulfuras.java new file mode 100644 index 00000000..00c1a262 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/Sulfuras.java @@ -0,0 +1,13 @@ +package com.gildedrose; + +public class Sulfuras extends Item { +// "Sulfuras", being a legendary item, never has to be sold or decreases in Quality + + public Sulfuras(String name, int sellIn, int quality) { + super(name, sellIn, quality); + } + + public Item updateQuality(Item item) { + return new Sulfuras(item.name, item.sellIn, item.quality); + } + } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 8ae29eec..1e0d7827 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -9,9 +9,9 @@ class GildedRoseTest { @Test void foo() { Item[] items = new Item[] { new Item("foo", 0, 0) }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals("fixme", app.items[0].name); + GildedRose gildedRose = new GildedRose(items); + gildedRose.updateQuality(); + assertEquals("foo", gildedRose.items[0].name); } } diff --git a/Java/src/test/java/com/gildedrose/TestItems.java b/Java/src/test/java/com/gildedrose/TestItems.java new file mode 100644 index 00000000..aef10895 --- /dev/null +++ b/Java/src/test/java/com/gildedrose/TestItems.java @@ -0,0 +1,31 @@ +package com.gildedrose; + +public class TestItems { + public static void main(String[] args) { + System.out.println("Start Testing"); + + Item[] items = new Item[] { + new AgedBrie("Aged Brie", 2, 0), // + new Sulfuras("Sulfuras", 10, 5) // + + }; + + GildedRose gildedRose = new GildedRose(items); + + int days = 3; + if (args.length > 0) { + days = Integer.parseInt(args[0]) + 1; + } + + for (int i = 0; i < days; i++) { + System.out.println("-------- day " + i + " --------"); + System.out.println("name, sellIn, quality"); + for (Item item : items) { + System.out.println(item); + System.out.println(); + gildedRose.updateQuality(); + } + } + } + +} diff --git a/Java/src/test/java/com/gildedrose/TexttestFixture.java b/Java/src/test/java/com/gildedrose/TexttestFixture.java deleted file mode 100644 index d059c88f..00000000 --- a/Java/src/test/java/com/gildedrose/TexttestFixture.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.gildedrose; - -public class TexttestFixture { - public static void main(String[] args) { - System.out.println("OMGHAI!"); - - Item[] items = new Item[] { - new Item("+5 Dexterity Vest", 10, 20), // - new Item("Aged Brie", 2, 0), // - new Item("Elixir of the Mongoose", 5, 7), // - new Item("Sulfuras, Hand of Ragnaros", 0, 80), // - new Item("Sulfuras, Hand of Ragnaros", -1, 80), - new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20), - new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49), - new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49), - // this conjured item does not work properly yet - new Item("Conjured Mana Cake", 3, 6) }; - - GildedRose app = new GildedRose(items); - - int days = 2; - if (args.length > 0) { - days = Integer.parseInt(args[0]) + 1; - } - - for (int i = 0; i < days; i++) { - System.out.println("-------- day " + i + " --------"); - System.out.println("name, sellIn, quality"); - for (Item item : items) { - System.out.println(item); - } - System.out.println(); - app.updateQuality(); - } - } - -}