From 5009b3e7b487453804050787f761c27fa1eb567a Mon Sep 17 00:00:00 2001 From: danielpf30 Date: Wed, 27 May 2026 11:42:32 -0300 Subject: [PATCH] =?UTF-8?q?refatora=C3=A7ao=20completa,=20mantendo=20o=20c?= =?UTF-8?q?omportamento=20externo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/gildedrose/GildedRose.java | 54 ++----------------- .../main/java/com/gildedrose/ItemUpdater.java | 5 ++ .../gildedrose/experts/AgedBrieUpdater.java | 17 ++++++ .../experts/BackstagePassUpdater.java | 25 +++++++++ .../experts/ItemUpdaterFactory.java | 19 +++++++ .../gildedrose/experts/StandardUpdater.java | 18 +++++++ .../gildedrose/experts/SulfurasUpdater.java | 10 ++++ .../java/com/gildedrose/GildedRoseTest.java | 2 +- 8 files changed, 100 insertions(+), 50 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/ItemUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/experts/AgedBrieUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/experts/BackstagePassUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/experts/ItemUpdaterFactory.java create mode 100644 Java/src/main/java/com/gildedrose/experts/StandardUpdater.java create mode 100644 Java/src/main/java/com/gildedrose/experts/SulfurasUpdater.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 87a3b926..870102ee 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,7 @@ package com.gildedrose; +import com.gildedrose.experts.ItemUpdaterFactory; + class GildedRose { Item[] items; @@ -8,55 +10,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; - } - } - } + for (Item item : items) { + ItemUpdater expert = new ItemUpdaterFactory().createItemUpdater(item); + expert.update(item); } } } 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..2743d9ec --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ItemUpdater.java @@ -0,0 +1,5 @@ +package com.gildedrose; + +public interface ItemUpdater { + void update(Item item); +} diff --git a/Java/src/main/java/com/gildedrose/experts/AgedBrieUpdater.java b/Java/src/main/java/com/gildedrose/experts/AgedBrieUpdater.java new file mode 100644 index 00000000..aad7ab22 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/experts/AgedBrieUpdater.java @@ -0,0 +1,17 @@ +package com.gildedrose.experts; + +import com.gildedrose.Item; +import com.gildedrose.ItemUpdater; + +public class AgedBrieUpdater implements ItemUpdater { + @Override + public void update(Item item) { + item.sellIn--; + if (item.quality < 50) { + item.quality++; + } + if (item.sellIn < 0 && item.quality < 50) { + item.quality++; + } + } +} diff --git a/Java/src/main/java/com/gildedrose/experts/BackstagePassUpdater.java b/Java/src/main/java/com/gildedrose/experts/BackstagePassUpdater.java new file mode 100644 index 00000000..ab70c0ce --- /dev/null +++ b/Java/src/main/java/com/gildedrose/experts/BackstagePassUpdater.java @@ -0,0 +1,25 @@ +package com.gildedrose.experts; + +import com.gildedrose.Item; +import com.gildedrose.ItemUpdater; + +public class BackstagePassUpdater implements ItemUpdater { + @Override + public void update(Item item) { + 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 -= 1; + + if (item.sellIn < 0) { + item.quality = 0; + } + } +} diff --git a/Java/src/main/java/com/gildedrose/experts/ItemUpdaterFactory.java b/Java/src/main/java/com/gildedrose/experts/ItemUpdaterFactory.java new file mode 100644 index 00000000..91b54e69 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/experts/ItemUpdaterFactory.java @@ -0,0 +1,19 @@ +package com.gildedrose.experts; + +import com.gildedrose.Item; +import com.gildedrose.ItemUpdater; + +public class ItemUpdaterFactory { + public static ItemUpdater createItemUpdater(Item item) { + switch(item.name) { + case "Aged Brie": + return new AgedBrieUpdater(); + case "Backstage passes to a TAFKAL80ETC concert": + return new BackstagePassUpdater(); + case "Sulfuras, Hand of Ragnaros": + return new SulfurasUpdater(); + default: + return new StandardUpdater(); + } + }; +} diff --git a/Java/src/main/java/com/gildedrose/experts/StandardUpdater.java b/Java/src/main/java/com/gildedrose/experts/StandardUpdater.java new file mode 100644 index 00000000..aae567bb --- /dev/null +++ b/Java/src/main/java/com/gildedrose/experts/StandardUpdater.java @@ -0,0 +1,18 @@ +package com.gildedrose.experts; + +import com.gildedrose.Item; +import com.gildedrose.ItemUpdater; + +public class StandardUpdater implements ItemUpdater { + @Override + public void update(Item item) { + item.sellIn--; + if (item.quality > 0) { + item.quality--; + } + if (item.sellIn < 0 && item.quality > 0) { + item.quality--; + } + + } +} diff --git a/Java/src/main/java/com/gildedrose/experts/SulfurasUpdater.java b/Java/src/main/java/com/gildedrose/experts/SulfurasUpdater.java new file mode 100644 index 00000000..cb9c82d7 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/experts/SulfurasUpdater.java @@ -0,0 +1,10 @@ +package com.gildedrose.experts; + +import com.gildedrose.Item; +import com.gildedrose.ItemUpdater; + +public class SulfurasUpdater implements ItemUpdater { + @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 f2bca986..a7e8bfd6 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -81,7 +81,7 @@ class GildedRoseTest { } @Test - void aumentarQualityEmDoisSellInEntre10A6TAFKAL80ETC() { + void aumentarQualityEm2SellInEntre6A10TAFKAL80ETC() { Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert",6, 40), new Item("Backstage passes to a TAFKAL80ETC concert",10, 48)}; GildedRose app = new GildedRose(items);