From 8acefd2ab3affdae8b95faf82476dca356aec10b Mon Sep 17 00:00:00 2001 From: EstherIAngels Date: Thu, 4 Jun 2026 20:36:19 +0300 Subject: [PATCH] training refactor --- .../main/java/com/gildedrose/GildedRose.java | 54 +++---------------- .../gildedrose/strategy/AgedBrieStrategy.java | 16 ++++++ .../gildedrose/strategy/ConcertStrategy.java | 21 ++++++++ .../strategy/DefaultItemStrategy.java | 15 ++++++ .../strategy/ItemStrategyFactory.java | 14 +++++ .../strategy/ItemStrategyUpdate.java | 7 +++ .../gildedrose/strategy/SulfurasStrategy.java | 8 +++ .../java/com/gildedrose/GildedRoseTest.java | 12 ++++- 8 files changed, 98 insertions(+), 49 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/strategy/AgedBrieStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/strategy/ConcertStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/strategy/DefaultItemStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/strategy/ItemStrategyFactory.java create mode 100644 Java/src/main/java/com/gildedrose/strategy/ItemStrategyUpdate.java create mode 100644 Java/src/main/java/com/gildedrose/strategy/SulfurasStrategy.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 87a3b926..5a8559e5 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,8 @@ package com.gildedrose; +import com.gildedrose.strategy.ItemStrategyFactory; +import com.gildedrose.strategy.ItemStrategyUpdate; + class GildedRose { Item[] items; @@ -9,54 +12,9 @@ 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; - } - } - } + ItemStrategyUpdate strategy = ItemStrategyFactory.getStrategy(items[i]); + strategy.update(items[i]); } } } + diff --git a/Java/src/main/java/com/gildedrose/strategy/AgedBrieStrategy.java b/Java/src/main/java/com/gildedrose/strategy/AgedBrieStrategy.java new file mode 100644 index 00000000..db6ec76c --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategy/AgedBrieStrategy.java @@ -0,0 +1,16 @@ +package com.gildedrose.strategy; + +import com.gildedrose.Item; + +public class AgedBrieStrategy implements ItemStrategyUpdate{ + @Override + public void update(Item item) + { + item.sellIn--; + if (item.quality < 50) + item.quality++; + if(item.quality < 50 && item.sellIn < 0) + item.quality++; + } + +} diff --git a/Java/src/main/java/com/gildedrose/strategy/ConcertStrategy.java b/Java/src/main/java/com/gildedrose/strategy/ConcertStrategy.java new file mode 100644 index 00000000..eb1de27a --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategy/ConcertStrategy.java @@ -0,0 +1,21 @@ +package com.gildedrose.strategy; + +import com.gildedrose.Item; + +public class ConcertStrategy implements ItemStrategyUpdate{ + @Override + public void update(Item item){ + if (item.sellIn == 0) + item.quality = 0; + else { + if (item.quality < 50) + item.quality++; + if (item.sellIn < 11 && item.quality < 50) + item.quality++; + if (item.sellIn < 6 && item.quality < 50) + item.quality++; + } + item.sellIn--; + + } +} diff --git a/Java/src/main/java/com/gildedrose/strategy/DefaultItemStrategy.java b/Java/src/main/java/com/gildedrose/strategy/DefaultItemStrategy.java new file mode 100644 index 00000000..61756dd3 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategy/DefaultItemStrategy.java @@ -0,0 +1,15 @@ +package com.gildedrose.strategy; + +import com.gildedrose.Item; + +public class DefaultItemStrategy implements ItemStrategyUpdate{ + @Override + public void update(Item item){ + if (item.quality > 0) + item.quality--; + item.sellIn--; + if(item.sellIn < 0 && item.quality > 0) + item.quality--; + } + +} diff --git a/Java/src/main/java/com/gildedrose/strategy/ItemStrategyFactory.java b/Java/src/main/java/com/gildedrose/strategy/ItemStrategyFactory.java new file mode 100644 index 00000000..9e76eda8 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategy/ItemStrategyFactory.java @@ -0,0 +1,14 @@ +package com.gildedrose.strategy; + +import com.gildedrose.Item; + +public class ItemStrategyFactory { + public static ItemStrategyUpdate getStrategy(Item item){ + switch (item.name) { + case "Aged Brie": return new AgedBrieStrategy(); + case "Backstage passes to a TAFKAL80ETC concert": return new ConcertStrategy(); + case "Sulfuras, Hand of Ragnaros": return new SulfurasStrategy(); + default: return new DefaultItemStrategy(); + } + } +} diff --git a/Java/src/main/java/com/gildedrose/strategy/ItemStrategyUpdate.java b/Java/src/main/java/com/gildedrose/strategy/ItemStrategyUpdate.java new file mode 100644 index 00000000..d80b955b --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategy/ItemStrategyUpdate.java @@ -0,0 +1,7 @@ +package com.gildedrose.strategy; + +import com.gildedrose.Item; + +public interface ItemStrategyUpdate { + void update(Item item); +} diff --git a/Java/src/main/java/com/gildedrose/strategy/SulfurasStrategy.java b/Java/src/main/java/com/gildedrose/strategy/SulfurasStrategy.java new file mode 100644 index 00000000..728bd628 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/strategy/SulfurasStrategy.java @@ -0,0 +1,8 @@ +package com.gildedrose.strategy; + +import com.gildedrose.Item; + +public class SulfurasStrategy implements ItemStrategyUpdate{ + @Override + public void update(Item item){} +} diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 8ae29eec..47057df7 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -11,7 +11,17 @@ class GildedRoseTest { Item[] items = new Item[] { new Item("foo", 0, 0) }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals("fixme", app.items[0].name); + assertEquals("foo", app.items[0].name); + } + + @Test + void defaultItem_shouldDecreaseSellInAndQualityEachDay(){ + Item[] items = new Item[] { new Item("vest", 20, 19) }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(19, app.items[0].sellIn); + assertEquals(18, app.items[0].quality); + } }