diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 8d6e5cb9..76519690 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,9 +1,7 @@ package com.gildedrose; -import com.gildedrose.item.CustomisedItem; import com.gildedrose.item.Item; import com.gildedrose.item.CustomisedItemFactory; -import com.gildedrose.item.QualityValues; class GildedRose { @@ -17,20 +15,7 @@ class GildedRose { public void updateQuality() { for (Item item : items) { - itemFactory.customiseItem(item).updateState(); - if (hasReachedLowestQualityValue(item)) { - item.quality = QualityValues.lowestValuePossible(); - } else if (hasReachedHighestQualityValue(item)) { - item.quality = QualityValues.highestValuePossible(item); - } + itemFactory.customiseItem(item).updateState(item); } } - - private boolean hasReachedLowestQualityValue(Item item) { - return item.quality < QualityValues.lowestValuePossible(); - } - - private boolean hasReachedHighestQualityValue(Item item) { - return item.quality > QualityValues.highestValuePossible(item); - } } \ No newline at end of file diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java index 8f3cb9b7..4efc314c 100644 --- a/Java/src/main/java/com/gildedrose/item/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -1,6 +1,6 @@ package com.gildedrose.item; -public class AgedBrie implements CustomisedItem { +public class AgedBrie extends CustomisedItem { private final Item item; @@ -8,16 +8,23 @@ public class AgedBrie implements CustomisedItem { this.item = item; } - public void updateState() { - decreaseSellByDayValueByOne(); - increaseQualityByOne(); + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; } - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; + @Override + int updatedItemQuality() { + return item.quality += 1; } - private void increaseQualityByOne() { - item.quality += 1; + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } } diff --git a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java index 1308f41e..e2b4b105 100644 --- a/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java +++ b/Java/src/main/java/com/gildedrose/item/BackstagePassesItem.java @@ -1,6 +1,6 @@ package com.gildedrose.item; -public class BackstagePassesItem implements CustomisedItem { +public class BackstagePassesItem extends CustomisedItem { private final Item item; @@ -8,32 +8,43 @@ public class BackstagePassesItem implements CustomisedItem { this.item = item; } - public void updateState() { - decreaseSellByDayValueByOne(); + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; + } + + @Override + int updatedItemQuality() { if (sellByDayValueIsOver(10)) { - increaseQualityBy(1); + return qualityIncreasedBy(1); } else if (sellByDayValueIsOver(5)) { - increaseQualityBy(2); + return qualityIncreasedBy(2); } else if (sellByDayValueIsOver(0)) { - increaseQualityBy(3); + return qualityIncreasedBy(3); } else { - dropQualityToZero(); + return qualityDroppedToZero(); } } - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } private boolean sellByDayValueIsOver(int dayNumber) { return item.sellIn > dayNumber; } - private void increaseQualityBy(int qualityValue) { - item.quality += qualityValue; + private int qualityIncreasedBy(int qualityValue) { + return item.quality += qualityValue; } - private void dropQualityToZero() { - item.quality = 0; + private int qualityDroppedToZero() { + return 0; } } diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java index 4d62df34..697f5b78 100644 --- a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -1,13 +1,38 @@ package com.gildedrose.item; -public class ConjuredItem extends StandardItem { +public class ConjuredItem extends CustomisedItem { + + private final Item item; public ConjuredItem(Item item) { - super(item); + this.item = item; } @Override - public int decreasingValueOverZeroDaysToSell() { - return 2; + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); + } + + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; + } + + @Override + int updatedItemQuality() { + if (sellByDayValueIsOverZero()) { + return item.quality -= 2; + } else { + return item.quality -= 4; + } + } + + private boolean sellByDayValueIsOverZero() { + return item.sellIn > 0; } } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java index 7b619438..65e39119 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItem.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItem.java @@ -1,5 +1,23 @@ package com.gildedrose.item; -public interface CustomisedItem { - void updateState(); +public abstract class CustomisedItem { + + public final void updateState(Item item) { + item.sellIn = updatedItemSellIn(); + item.quality = updatedItemQuality(); + + if (hasReachedLowestQualityValue()) { + item.quality = QualityValues.lowestValuePossible(); + } else if (hasReachedHighestQualityValue()) { + item.quality = QualityValues.highestValuePossible(item); + } + } + + abstract int updatedItemSellIn(); + + abstract int updatedItemQuality(); + + protected abstract boolean hasReachedHighestQualityValue(); + + protected abstract boolean hasReachedLowestQualityValue(); } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index e4864475..4be371cd 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -13,7 +13,7 @@ public class CustomisedItemFactory { public final static String CONJURED_ITEM = "Conjured"; public CustomisedItemFactory() { - ITEM_TYPES_LIST.put(SULFURAS, (item) -> new Sulfuras()); + ITEM_TYPES_LIST.put(SULFURAS, Sulfuras::new); ITEM_TYPES_LIST.put(BRIE, AgedBrie::new); ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, BackstagePassesItem::new); ITEM_TYPES_LIST.put(CONJURED_ITEM, ConjuredItem::new); diff --git a/Java/src/main/java/com/gildedrose/item/StandardItem.java b/Java/src/main/java/com/gildedrose/item/StandardItem.java index d5b4aa67..a89e99d9 100644 --- a/Java/src/main/java/com/gildedrose/item/StandardItem.java +++ b/Java/src/main/java/com/gildedrose/item/StandardItem.java @@ -1,6 +1,6 @@ package com.gildedrose.item; -public class StandardItem implements CustomisedItem { +public class StandardItem extends CustomisedItem { private final Item item; @@ -8,32 +8,31 @@ public class StandardItem implements CustomisedItem { this.item = item; } - public void updateState() { - decreaseSellByDayValueByOne(); + @Override + int updatedItemSellIn() { + return item.sellIn -= 1; + } + + @Override + int updatedItemQuality() { if (sellByDayValueIsOverZero()) { - decreaseQualityBy(decreasingValueOverZeroDaysToSell()); + return item.quality -= 1; } else { - decreaseQualityBy(decreasingValueForZeroOrLessDaysToSell()); + return item.quality -= 2; } } - public int decreasingValueOverZeroDaysToSell() { - return 1; + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item); } - private void decreaseSellByDayValueByOne() { - item.sellIn -= 1; + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } private boolean sellByDayValueIsOverZero() { return item.sellIn > 0; } - - private void decreaseQualityBy(int qualityValue) { - item.quality -= qualityValue; - } - - private int decreasingValueForZeroOrLessDaysToSell() { - return decreasingValueOverZeroDaysToSell() * 2; - } } diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java index 398721e6..451a9b5e 100644 --- a/Java/src/main/java/com/gildedrose/item/Sulfuras.java +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -1,7 +1,30 @@ package com.gildedrose.item; -public class Sulfuras implements CustomisedItem { +public class Sulfuras extends CustomisedItem { - public void updateState() { + private final Item item; + + public Sulfuras(Item item) { + this.item = item; + } + + @Override + int updatedItemSellIn() { + return item.sellIn; + } + + @Override + int updatedItemQuality() { + return item.quality; + } + + @Override + protected boolean hasReachedHighestQualityValue() { + return item.quality > QualityValues.highestValuePossible(item) ; + } + + @Override + protected boolean hasReachedLowestQualityValue() { + return item.quality < QualityValues.lowestValuePossible(); } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 7bda5177..a27b2d6e 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -74,7 +74,7 @@ public class GildedRoseTest { } @Test - public void backstagePassesItemDecreasesQualityByOneIfSellByDayMoreThanEleven() { + public void backstagePassesItemIncreasesQualityByOneIfSellByDayMoreThanEleven() { GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 12, 1); app.updateQuality(); @@ -83,7 +83,7 @@ public class GildedRoseTest { } @Test - public void backstagePassesItemDecreasesQualityByTwoIfSellByDayIsMoreThanSix() { + public void backstagePassesItemIncreasesQualityByTwoIfSellByDayIsMoreThanSix() { GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 10, 1); app.updateQuality(); @@ -92,7 +92,7 @@ public class GildedRoseTest { } @Test - public void backstagePassesItemDecreasesQualityByThreeIfSellByDayIsMoreThanZero() { + public void backstagePassesItemIncreasesQualityByThreeIfSellByDayIsMoreThanZero() { GildedRose app = newGildedRose(CustomisedItemFactory.BACKSTAGE_PASSES_ITEM, 5, 1); app.updateQuality();