🔨 move quality logic to ItemHandler

This commit is contained in:
Velizar Todorov 2021-11-25 13:43:12 +01:00
parent 1531172f23
commit a2f7a78c35
6 changed files with 115 additions and 133 deletions

View File

@ -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;
}
}

View File

@ -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++;
}
}

View File

@ -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;
}
}

View File

@ -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--;
}
}

View File

@ -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--;
}
}

View File

@ -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--;
}
}