From a2f7a78c35c91aa3cb61487b3a7836cc800c23b8 Mon Sep 17 00:00:00 2001 From: Velizar Todorov Date: Thu, 25 Nov 2021 13:43:12 +0100 Subject: [PATCH] :hammer: move quality logic to `ItemHandler` --- .../gildedrose/item_helpers/ItemHandler.java | 75 +++++++++++++++++++ .../java/com/gildedrose/items/AgedBrie.java | 37 ++------- .../com/gildedrose/items/BackstagePass.java | 45 +++-------- .../java/com/gildedrose/items/Conjured.java | 36 ++------- .../java/com/gildedrose/items/Normal.java | 36 ++------- .../java/com/gildedrose/items/Sulfura.java | 19 ++--- 6 files changed, 115 insertions(+), 133 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java diff --git a/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java b/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java new file mode 100644 index 00000000..9bc1436f --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java @@ -0,0 +1,75 @@ +package com.gildedrose.item_helpers; + +import com.gildedrose.Item; + +import static java.lang.Math.max; + +public class ItemHandler { + + private static final int QUALITY = 80; + + private final Item item; + + public ItemHandler(Item item) { + this.item = item; + } + + public void decrementSellInDate() { + this.item.sellIn--; + } + + public boolean qualityIsHigherThanZero() { + return item.quality > 0; + } + + public boolean sellInDatePasses() { + return this.item.sellIn < 0; + } + + public void incrementQualityByTwo() { + this.item.quality = max(this.item.quality + 2, 0); + } + + public void incrementQuality() { + this.item.quality++; + } + + public void decrementQuality() { + this.item.quality--; + } + + public void decrementQualityBy4() { + this.item.quality = max(this.item.quality - 4, 0); + } + + public void decrementQualityBy2() { + this.item.quality = this.item.quality - 2; + } + + public void setQualityTo80() { + if (this.item.quality != QUALITY) { + this.item.quality = QUALITY; + } + } + + public boolean sellInLessThan5Days() { + return this.item.sellIn >= 0 && this.item.sellIn <= 5; + } + + public boolean sellInLessThan10Days() { + return this.item.sellIn >= 5 && this.item.sellIn <= 10; + } + + public boolean sellInDaysMoreThan10Days() { + return this.item.sellIn >= 10; + } + + public void makeQualityZero() { + this.item.quality = 0; + } + + public void incrementQualityBy3() { + this.item.quality = this.item.quality + 3; + } + +} diff --git a/Java/src/main/java/com/gildedrose/items/AgedBrie.java b/Java/src/main/java/com/gildedrose/items/AgedBrie.java index 30d05927..f0cd8b86 100644 --- a/Java/src/main/java/com/gildedrose/items/AgedBrie.java +++ b/Java/src/main/java/com/gildedrose/items/AgedBrie.java @@ -1,48 +1,27 @@ package com.gildedrose.items; import com.gildedrose.Item; +import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; -import static java.lang.Math.max; - public class AgedBrie implements ItemType { - private final Item item; + private final ItemHandler item; public AgedBrie(Item item) { - this.item = item; + this.item = new ItemHandler(item); } @Override public void updateQuality() { - decrementSellInDate(); - if (qualityIsPositive()) { - if (sellInDatePasses()) { - incrementQualityByTwo(); + item.decrementSellInDate(); + if (item.qualityIsHigherThanZero()) { + if (item.sellInDatePasses()) { + item.incrementQualityByTwo(); } else { - incrementQuality(); + item.incrementQuality(); } } } - private boolean qualityIsPositive() { - return item.quality > 0; - } - - private void decrementSellInDate() { - this.item.sellIn--; - } - - private boolean sellInDatePasses() { - return this.item.sellIn < 0; - } - - private void incrementQualityByTwo() { - this.item.quality = max(this.item.quality + 2, 0); - } - - private void incrementQuality() { - this.item.quality++; - } - } diff --git a/Java/src/main/java/com/gildedrose/items/BackstagePass.java b/Java/src/main/java/com/gildedrose/items/BackstagePass.java index fd20813e..88dadf85 100644 --- a/Java/src/main/java/com/gildedrose/items/BackstagePass.java +++ b/Java/src/main/java/com/gildedrose/items/BackstagePass.java @@ -1,52 +1,29 @@ package com.gildedrose.items; import com.gildedrose.Item; +import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; public class BackstagePass implements ItemType { - private final Item item; + private final ItemHandler item; public BackstagePass(Item item) { - this.item = item; + this.item = new ItemHandler(item); } @Override public void updateQuality() { - decrementSellInDate(); - determineQuality(); - } - - private void determineQuality() { - if (this.item.sellIn >= 10) { - incrementQuality(); - } else if (this.item.sellIn >= 5) { - incrementQualityByTwo(); - } else if (this.item.sellIn >= 0) { - incrementQualityByThree(); + item.decrementSellInDate(); + if (item.sellInDaysMoreThan10Days()) { + item.incrementQuality(); + } else if (item.sellInLessThan10Days()) { + item.incrementQualityByTwo(); + } else if (item.sellInLessThan5Days()) { + item.incrementQualityBy3(); } else { - makeQualityZero(); + item.makeQualityZero(); } } - private void decrementSellInDate() { - this.item.sellIn--; - } - - private void incrementQuality() { - this.item.quality++; - } - - private void makeQualityZero() { - this.item.quality = 0; - } - - private void incrementQualityByTwo() { - this.item.quality = this.item.quality + 2; - } - - private void incrementQualityByThree() { - this.item.quality = this.item.quality + 3; - } - } diff --git a/Java/src/main/java/com/gildedrose/items/Conjured.java b/Java/src/main/java/com/gildedrose/items/Conjured.java index 45481722..fc521b10 100644 --- a/Java/src/main/java/com/gildedrose/items/Conjured.java +++ b/Java/src/main/java/com/gildedrose/items/Conjured.java @@ -1,47 +1,27 @@ package com.gildedrose.items; import com.gildedrose.Item; +import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; -import static java.lang.Math.max; - public class Conjured implements ItemType { - private final Item item; + private final ItemHandler item; public Conjured(Item item) { - this.item = item; + this.item = new ItemHandler(item); } @Override public void updateQuality() { - decrementSellInDate(); - if (qualityIsGreaterThanZero()) { - if (sellInDatePasses()) { - decrementQualityByFour(); + item.decrementSellInDate(); + if (item.qualityIsHigherThanZero()) { + if (item.sellInDatePasses()) { + item.decrementQualityBy4(); } else { - decrementQuality(); + item.decrementQuality(); } } } - private boolean qualityIsGreaterThanZero() { - return item.quality > 0; - } - - private void decrementSellInDate() { - this.item.sellIn--; - } - - private void decrementQualityByFour() { - this.item.quality = max(this.item.quality - 4, 0); - } - - private boolean sellInDatePasses() { - return this.item.sellIn < 0; - } - - private void decrementQuality() { - this.item.quality--; - } } diff --git a/Java/src/main/java/com/gildedrose/items/Normal.java b/Java/src/main/java/com/gildedrose/items/Normal.java index 62b686d6..5a355132 100644 --- a/Java/src/main/java/com/gildedrose/items/Normal.java +++ b/Java/src/main/java/com/gildedrose/items/Normal.java @@ -1,47 +1,27 @@ package com.gildedrose.items; import com.gildedrose.Item; +import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; -import static java.lang.Math.max; - public class Normal implements ItemType { - private final Item item; + private final ItemHandler item; public Normal(Item item) { - this.item = item; + this.item = new ItemHandler(item); } @Override public void updateQuality() { - decrementSellInDate(); - if (qualityIsPositive()) { - if (sellInDatePasses()) { - decrementQualityByTwo(); + item.decrementSellInDate(); + if (item.qualityIsHigherThanZero()) { + if (item.sellInDatePasses()) { + item.decrementQualityBy2(); } else { - decrementQuality(); + item.decrementQuality(); } } } - private boolean qualityIsPositive() { - return item.quality > 0; - } - - private void decrementSellInDate() { - this.item.sellIn--; - } - - private void decrementQualityByTwo() { - this.item.quality = max(this.item.quality - 2, 0); - } - - private boolean sellInDatePasses() { - return this.item.sellIn < 0; - } - - private void decrementQuality() { - this.item.quality--; - } } diff --git a/Java/src/main/java/com/gildedrose/items/Sulfura.java b/Java/src/main/java/com/gildedrose/items/Sulfura.java index 07e7e112..4a0ef582 100644 --- a/Java/src/main/java/com/gildedrose/items/Sulfura.java +++ b/Java/src/main/java/com/gildedrose/items/Sulfura.java @@ -1,30 +1,21 @@ package com.gildedrose.items; import com.gildedrose.Item; +import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; public class Sulfura implements ItemType { - private static final int QUALITY = 80; - private final Item item; + private final ItemHandler item; public Sulfura(Item item) { - this.item = item; + this.item = new ItemHandler(item); } @Override public void updateQuality() { - decrementSellInDate(); - setQualityTo80(); + item.decrementSellInDate(); + item.setQualityTo80(); } - private void setQualityTo80() { - if (this.item.quality != QUALITY) { - this.item.quality = QUALITY; - } - } - - private void decrementSellInDate() { - this.item.sellIn--; - } }