From fa0aa29a17896b28bff9b5d66d8ed8d02d141009 Mon Sep 17 00:00:00 2001 From: Erol Shaban Date: Wed, 21 Aug 2019 09:14:01 +0200 Subject: [PATCH] Template method initialized in order to update items respectively. Each item's quality and sellIn can be updated in a different manner --- .../java/com/gildedrose/AgedBrieUpdater.java | 15 ++++++++ .../com/gildedrose/BackstagePassUpdater.java | 25 ++++++++++++ .../java/com/gildedrose/ConjuredUpdater.java | 17 +++++++++ .../com/gildedrose/GildedRosePrototype.java | 16 ++++++++ .../main/java/com/gildedrose/ItemUpdater.java | 10 +++++ .../com/gildedrose/ItemUpdaterFactory.java | 38 +++++++++++++++++++ .../com/gildedrose/StandardItemUpdater.java | 16 ++++++++ .../java/com/gildedrose/SulfurasUpdater.java | 13 +++++++ .../java/com/gildedrose/TexttestFixture.java | 2 + 9 files changed, 152 insertions(+) create mode 100644 Java/src/main/java/com/gildedrose/AgedBrieUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/BackstagePassUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/ConjuredUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/GildedRosePrototype.java create mode 100644 Java/src/main/java/com/gildedrose/ItemUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java create mode 100644 Java/src/main/java/com/gildedrose/StandardItemUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/SulfurasUpdater.java diff --git a/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java b/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java new file mode 100644 index 00000000..070c6690 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/AgedBrieUpdater.java @@ -0,0 +1,15 @@ +package com.gildedrose; + +public class AgedBrieUpdater extends ItemUpdater { + @Override + void updateQuality(Item item) { + if (item.quality < 50) { + item.quality += 1; + } + } + + @Override + void updateSellIn(Item item) { + item.sellIn -=1; + } +} diff --git a/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java b/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java new file mode 100644 index 00000000..5bad8662 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java @@ -0,0 +1,25 @@ +package com.gildedrose; + +public class BackstagePassUpdater extends ItemUpdater { + @Override + void updateQuality(Item item) { + if (item.sellIn < 0) { + item.quality = 0; + } else if (item.quality < 50) { + item.quality += 1; + + if (item.sellIn < 11 && item.quality < 50) { + item.quality += 1; + } + + if (item.sellIn < 6 && item.quality < 50) { + item.quality += 1; + } + } + } + + @Override + void updateSellIn(Item item) { + item.sellIn -=1; + } +} diff --git a/Java/src/main/java/com/gildedrose/ConjuredUpdater.java b/Java/src/main/java/com/gildedrose/ConjuredUpdater.java new file mode 100644 index 00000000..11562876 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ConjuredUpdater.java @@ -0,0 +1,17 @@ +package com.gildedrose; + +public class ConjuredUpdater extends ItemUpdater { + @Override + void updateQuality(Item item) { + if (item.quality > 0) { + item.quality -= 2; + if (item.quality < 0 ) + item.quality =0; + } + } + + @Override + void updateSellIn(Item item) { + item.sellIn -= 1; + } +} diff --git a/Java/src/main/java/com/gildedrose/GildedRosePrototype.java b/Java/src/main/java/com/gildedrose/GildedRosePrototype.java new file mode 100644 index 00000000..4ed8cf7c --- /dev/null +++ b/Java/src/main/java/com/gildedrose/GildedRosePrototype.java @@ -0,0 +1,16 @@ +package com.gildedrose; + +class GildedRosePrototype { + Item[] items; + + public GildedRosePrototype(Item[] items) { + this.items = items; + } + + public void updateQuality() { + for (Item item : items) { + ItemUpdaterFactory.getItemUpdater(item) + .updateStateFor(item); + } + } +} \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/ItemUpdater.java b/Java/src/main/java/com/gildedrose/ItemUpdater.java new file mode 100644 index 00000000..8a7d1f35 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ItemUpdater.java @@ -0,0 +1,10 @@ +package com.gildedrose; + +public abstract class ItemUpdater { + public void updateStateFor(Item item){ + updateSellIn(item); + updateQuality(item); + } + abstract void updateQuality(Item item); + abstract void updateSellIn(Item item); +} diff --git a/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java b/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java new file mode 100644 index 00000000..a5ce349a --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java @@ -0,0 +1,38 @@ +package com.gildedrose; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class ItemUpdaterFactory { + + private static final Map registeredCustomUpdaters = new HashMap<>(); + static { + registeredCustomUpdaters.put("Aged Brie", new AgedBrieUpdater()); + registeredCustomUpdaters.put("Backstage passes to a TAFKAL80ETC concert", new BackstagePassUpdater()); + registeredCustomUpdaters.put("Sulfuras, Hand of Ragnaros", new SulfurasUpdater()); + registeredCustomUpdaters.put("Conjured", new ConjuredUpdater()); + } + + public static void registerCustomUpdater(String type, ItemUpdater updater ){ + registeredCustomUpdaters.put(type, updater); + } + + public static ItemUpdater getItemUpdater(Item item) { + return Optional.ofNullable(registeredCustomUpdaters.get(item.name)) + .orElse(new StandardItemUpdater()); + } + + /*public static ItemUpdater getItemUpdater_(Item item) { + if ("Aged Brie".equals(item.name)) + return new AgedBrieUpdater(); + else if ("Backstage passes to a TAFKAL80ETC concert".equals(item.name)) + return new BackstagePassUpdater(); + else if ("Sulfuras, Hand of Ragnaros".equals(item.name)) + return new SulfurasUpdater(); + else if ("Conjured".equals(item.name)) + return new ConjuredUpdater(); + else + return new StandardItemUpdater(); + }*/ +} diff --git a/Java/src/main/java/com/gildedrose/StandardItemUpdater.java b/Java/src/main/java/com/gildedrose/StandardItemUpdater.java new file mode 100644 index 00000000..1c3b586f --- /dev/null +++ b/Java/src/main/java/com/gildedrose/StandardItemUpdater.java @@ -0,0 +1,16 @@ +package com.gildedrose; + +public class StandardItemUpdater extends ItemUpdater{ + + @Override + void updateQuality(Item item) { + if (item.quality > 0) { + item.quality -= 1; + } + } + + @Override + void updateSellIn(Item item) { + item.sellIn -= 1; + } +} diff --git a/Java/src/main/java/com/gildedrose/SulfurasUpdater.java b/Java/src/main/java/com/gildedrose/SulfurasUpdater.java new file mode 100644 index 00000000..e6dfe122 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/SulfurasUpdater.java @@ -0,0 +1,13 @@ +package com.gildedrose; + +public class SulfurasUpdater extends ItemUpdater { + @Override + void updateQuality(Item item) { + System.out.println("########Sulfuras is a legendary product"); + } + + @Override + void updateSellIn(Item item) { + System.out.println("########Never gets old"); + } +} diff --git a/Java/src/test/java/com/gildedrose/TexttestFixture.java b/Java/src/test/java/com/gildedrose/TexttestFixture.java index d059c88f..6baf8ddc 100644 --- a/Java/src/test/java/com/gildedrose/TexttestFixture.java +++ b/Java/src/test/java/com/gildedrose/TexttestFixture.java @@ -13,6 +13,8 @@ public class TexttestFixture { 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), + new Item("Backstage passes to a TAFKAL80ETC concert", 1, 30), + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 30), // this conjured item does not work properly yet new Item("Conjured Mana Cake", 3, 6) };