From 44f4e886898dd9593807a554d52daec1bd7a6426 Mon Sep 17 00:00:00 2001 From: Velizar Todorov Date: Tue, 30 Nov 2021 17:34:16 +0100 Subject: [PATCH] :hammer: convert `BackstagePassItem` from anemic to rich --- .../gildedrose/item_helpers/ItemHandler.java | 69 ++++++------------- .../gildedrose/items/BackstagePassItem.java | 56 ++++++++++++--- 2 files changed, 65 insertions(+), 60 deletions(-) diff --git a/src/main/java/com/gildedrose/item_helpers/ItemHandler.java b/src/main/java/com/gildedrose/item_helpers/ItemHandler.java index ed78875c..8393a979 100644 --- a/src/main/java/com/gildedrose/item_helpers/ItemHandler.java +++ b/src/main/java/com/gildedrose/item_helpers/ItemHandler.java @@ -3,62 +3,33 @@ package com.gildedrose.item_helpers; import com.gildedrose.main.Item; import static java.lang.Math.max; -import static java.lang.Math.min; public class ItemHandler { - private final Item item; + private final Item item; - public ItemHandler(Item item) { - this.item = item; - } + public ItemHandler(Item item) { + this.item = item; + } - public void decrementSellInDate() { - item.sellIn--; - } + public void decrementSellInDate() { + item.sellIn--; + } - public boolean beforeSellInDate() { - return item.sellIn >= 0; - } + public boolean beforeSellInDate() { + return item.sellIn >= 0; + } + + public void decrementQuality() { + item.quality = max(item.quality - 1, 0); + } - public boolean lessThan5DaysToSellIn() { - return item.sellIn >= 0 && item.sellIn <= 5; - } + public void decrementQualityBy2() { + item.quality = max(item.quality - 2, 0); + } - public boolean lessThan10DaysToSellIn() { - return item.sellIn >= 5 && item.sellIn <= 10; - } - - public boolean moreThan10DaysToSellIn() { - return item.sellIn >= 10; - } - - public void makeQualityZero() { - item.quality = 0; - } - - public void incrementQuality() { - item.quality = min(item.quality + 1, 50); - } - - public void incrementQualityBy2() { - item.quality = min(item.quality + 2, 50); - } - - public void incrementQualityBy3() { - item.quality = min(item.quality + 3, 50); - } - - public void decrementQuality() { - item.quality = max(item.quality - 1, 0); - } - - public void decrementQualityBy2() { - item.quality = max(item.quality - 2, 0); - } - - public void decrementQualityBy4() { - item.quality = max(item.quality - 4, 0); - } + public void decrementQualityBy4() { + item.quality = max(item.quality - 4, 0); + } } diff --git a/src/main/java/com/gildedrose/items/BackstagePassItem.java b/src/main/java/com/gildedrose/items/BackstagePassItem.java index 82e0efef..3c2ffc61 100644 --- a/src/main/java/com/gildedrose/items/BackstagePassItem.java +++ b/src/main/java/com/gildedrose/items/BackstagePassItem.java @@ -1,32 +1,66 @@ package com.gildedrose.items; -import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; import com.gildedrose.main.Item; +import static java.lang.Math.min; + public class BackstagePassItem implements ItemType { public static final String BACKSTAGE_PASS = "Backstage passes to a TAFKAL80ETC concert"; - private final ItemHandler item; + + private final Item item; public BackstagePassItem(Item item) { - this.item = new ItemHandler(item); + this.item = item; } @Override public void updateQuality() { - item.decrementSellInDate(); - if (item.moreThan10DaysToSellIn()) { - item.incrementQuality(); - } else if (item.lessThan10DaysToSellIn()) { - item.incrementQualityBy2(); - } else if (item.lessThan5DaysToSellIn()) { - item.incrementQualityBy3(); + decrementSellInDate(); + if (moreThan10DaysToSellIn()) { + incrementQuality(); + } else if (lessThan10DaysToSellIn()) { + incrementQualityBy2(); + } else if (lessThan5DaysToSellIn()) { + incrementQualityBy3(); } else { - item.makeQualityZero(); + makeQualityZero(); } } + public void decrementSellInDate() { + item.sellIn--; + } + + public boolean lessThan5DaysToSellIn() { + return item.sellIn >= 0 && item.sellIn <= 5; + } + + public boolean lessThan10DaysToSellIn() { + return item.sellIn >= 5 && item.sellIn <= 10; + } + + public boolean moreThan10DaysToSellIn() { + return item.sellIn >= 10; + } + + public void makeQualityZero() { + item.quality = 0; + } + + public void incrementQuality() { + item.quality = min(item.quality + 1, 50); + } + + public void incrementQualityBy2() { + item.quality = min(item.quality + 2, 50); + } + + public void incrementQualityBy3() { + item.quality = min(item.quality + 3, 50); + } + @Override public String getName() { return BACKSTAGE_PASS;