🔨 convert BackstagePassItem from anemic to rich

This commit is contained in:
Velizar Todorov 2021-11-30 17:34:16 +01:00
parent 79587f0ed0
commit 44f4e88689
2 changed files with 65 additions and 60 deletions

View File

@ -3,62 +3,33 @@ package com.gildedrose.item_helpers;
import com.gildedrose.main.Item; import com.gildedrose.main.Item;
import static java.lang.Math.max; import static java.lang.Math.max;
import static java.lang.Math.min;
public class ItemHandler { public class ItemHandler {
private final Item item; private final Item item;
public ItemHandler(Item item) { public ItemHandler(Item item) {
this.item = item; this.item = item;
} }
public void decrementSellInDate() { public void decrementSellInDate() {
item.sellIn--; item.sellIn--;
} }
public boolean beforeSellInDate() { public boolean beforeSellInDate() {
return item.sellIn >= 0; return item.sellIn >= 0;
} }
public void decrementQuality() {
item.quality = max(item.quality - 1, 0);
}
public boolean lessThan5DaysToSellIn() { public void decrementQualityBy2() {
return item.sellIn >= 0 && item.sellIn <= 5; item.quality = max(item.quality - 2, 0);
} }
public boolean lessThan10DaysToSellIn() { public void decrementQualityBy4() {
return item.sellIn >= 5 && item.sellIn <= 10; item.quality = max(item.quality - 4, 0);
} }
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);
}
} }

View File

@ -1,32 +1,66 @@
package com.gildedrose.items; package com.gildedrose.items;
import com.gildedrose.item_helpers.ItemHandler;
import com.gildedrose.item_helpers.ItemType; import com.gildedrose.item_helpers.ItemType;
import com.gildedrose.main.Item; import com.gildedrose.main.Item;
import static java.lang.Math.min;
public class BackstagePassItem implements ItemType { public class BackstagePassItem implements ItemType {
public static final String BACKSTAGE_PASS = "Backstage passes to a TAFKAL80ETC concert"; public static final String BACKSTAGE_PASS = "Backstage passes to a TAFKAL80ETC concert";
private final ItemHandler item;
private final Item item;
public BackstagePassItem(Item item) { public BackstagePassItem(Item item) {
this.item = new ItemHandler(item); this.item = item;
} }
@Override @Override
public void updateQuality() { public void updateQuality() {
item.decrementSellInDate(); decrementSellInDate();
if (item.moreThan10DaysToSellIn()) { if (moreThan10DaysToSellIn()) {
item.incrementQuality(); incrementQuality();
} else if (item.lessThan10DaysToSellIn()) { } else if (lessThan10DaysToSellIn()) {
item.incrementQualityBy2(); incrementQualityBy2();
} else if (item.lessThan5DaysToSellIn()) { } else if (lessThan5DaysToSellIn()) {
item.incrementQualityBy3(); incrementQualityBy3();
} else { } 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 @Override
public String getName() { public String getName() {
return BACKSTAGE_PASS; return BACKSTAGE_PASS;