mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 23:41:27 +00:00
🔨 move quality logic to ItemHandler
This commit is contained in:
parent
1531172f23
commit
a2f7a78c35
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,48 +1,27 @@
|
|||||||
package com.gildedrose.items;
|
package com.gildedrose.items;
|
||||||
|
|
||||||
import com.gildedrose.Item;
|
import com.gildedrose.Item;
|
||||||
|
import com.gildedrose.item_helpers.ItemHandler;
|
||||||
import com.gildedrose.item_helpers.ItemType;
|
import com.gildedrose.item_helpers.ItemType;
|
||||||
|
|
||||||
import static java.lang.Math.max;
|
|
||||||
|
|
||||||
public class AgedBrie implements ItemType {
|
public class AgedBrie implements ItemType {
|
||||||
|
|
||||||
private final Item item;
|
private final ItemHandler item;
|
||||||
|
|
||||||
public AgedBrie(Item item) {
|
public AgedBrie(Item item) {
|
||||||
this.item = item;
|
this.item = new ItemHandler(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
decrementSellInDate();
|
item.decrementSellInDate();
|
||||||
if (qualityIsPositive()) {
|
if (item.qualityIsHigherThanZero()) {
|
||||||
if (sellInDatePasses()) {
|
if (item.sellInDatePasses()) {
|
||||||
incrementQualityByTwo();
|
item.incrementQualityByTwo();
|
||||||
} else {
|
} 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++;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,52 +1,29 @@
|
|||||||
package com.gildedrose.items;
|
package com.gildedrose.items;
|
||||||
|
|
||||||
import com.gildedrose.Item;
|
import com.gildedrose.Item;
|
||||||
|
import com.gildedrose.item_helpers.ItemHandler;
|
||||||
import com.gildedrose.item_helpers.ItemType;
|
import com.gildedrose.item_helpers.ItemType;
|
||||||
|
|
||||||
public class BackstagePass implements ItemType {
|
public class BackstagePass implements ItemType {
|
||||||
|
|
||||||
private final Item item;
|
private final ItemHandler item;
|
||||||
|
|
||||||
public BackstagePass(Item item) {
|
public BackstagePass(Item item) {
|
||||||
this.item = item;
|
this.item = new ItemHandler(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
decrementSellInDate();
|
item.decrementSellInDate();
|
||||||
determineQuality();
|
if (item.sellInDaysMoreThan10Days()) {
|
||||||
}
|
item.incrementQuality();
|
||||||
|
} else if (item.sellInLessThan10Days()) {
|
||||||
private void determineQuality() {
|
item.incrementQualityByTwo();
|
||||||
if (this.item.sellIn >= 10) {
|
} else if (item.sellInLessThan5Days()) {
|
||||||
incrementQuality();
|
item.incrementQualityBy3();
|
||||||
} else if (this.item.sellIn >= 5) {
|
|
||||||
incrementQualityByTwo();
|
|
||||||
} else if (this.item.sellIn >= 0) {
|
|
||||||
incrementQualityByThree();
|
|
||||||
} else {
|
} 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,47 +1,27 @@
|
|||||||
package com.gildedrose.items;
|
package com.gildedrose.items;
|
||||||
|
|
||||||
import com.gildedrose.Item;
|
import com.gildedrose.Item;
|
||||||
|
import com.gildedrose.item_helpers.ItemHandler;
|
||||||
import com.gildedrose.item_helpers.ItemType;
|
import com.gildedrose.item_helpers.ItemType;
|
||||||
|
|
||||||
import static java.lang.Math.max;
|
|
||||||
|
|
||||||
public class Conjured implements ItemType {
|
public class Conjured implements ItemType {
|
||||||
|
|
||||||
private final Item item;
|
private final ItemHandler item;
|
||||||
|
|
||||||
public Conjured(Item item) {
|
public Conjured(Item item) {
|
||||||
this.item = item;
|
this.item = new ItemHandler(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
decrementSellInDate();
|
item.decrementSellInDate();
|
||||||
if (qualityIsGreaterThanZero()) {
|
if (item.qualityIsHigherThanZero()) {
|
||||||
if (sellInDatePasses()) {
|
if (item.sellInDatePasses()) {
|
||||||
decrementQualityByFour();
|
item.decrementQualityBy4();
|
||||||
} else {
|
} 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--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,47 +1,27 @@
|
|||||||
package com.gildedrose.items;
|
package com.gildedrose.items;
|
||||||
|
|
||||||
import com.gildedrose.Item;
|
import com.gildedrose.Item;
|
||||||
|
import com.gildedrose.item_helpers.ItemHandler;
|
||||||
import com.gildedrose.item_helpers.ItemType;
|
import com.gildedrose.item_helpers.ItemType;
|
||||||
|
|
||||||
import static java.lang.Math.max;
|
|
||||||
|
|
||||||
public class Normal implements ItemType {
|
public class Normal implements ItemType {
|
||||||
|
|
||||||
private final Item item;
|
private final ItemHandler item;
|
||||||
|
|
||||||
public Normal(Item item) {
|
public Normal(Item item) {
|
||||||
this.item = item;
|
this.item = new ItemHandler(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
decrementSellInDate();
|
item.decrementSellInDate();
|
||||||
if (qualityIsPositive()) {
|
if (item.qualityIsHigherThanZero()) {
|
||||||
if (sellInDatePasses()) {
|
if (item.sellInDatePasses()) {
|
||||||
decrementQualityByTwo();
|
item.decrementQualityBy2();
|
||||||
} else {
|
} 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--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,30 +1,21 @@
|
|||||||
package com.gildedrose.items;
|
package com.gildedrose.items;
|
||||||
|
|
||||||
import com.gildedrose.Item;
|
import com.gildedrose.Item;
|
||||||
|
import com.gildedrose.item_helpers.ItemHandler;
|
||||||
import com.gildedrose.item_helpers.ItemType;
|
import com.gildedrose.item_helpers.ItemType;
|
||||||
|
|
||||||
public class Sulfura implements ItemType {
|
public class Sulfura implements ItemType {
|
||||||
|
|
||||||
private static final int QUALITY = 80;
|
private final ItemHandler item;
|
||||||
private final Item item;
|
|
||||||
|
|
||||||
public Sulfura(Item item) {
|
public Sulfura(Item item) {
|
||||||
this.item = item;
|
this.item = new ItemHandler(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
decrementSellInDate();
|
item.decrementSellInDate();
|
||||||
setQualityTo80();
|
item.setQualityTo80();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setQualityTo80() {
|
|
||||||
if (this.item.quality != QUALITY) {
|
|
||||||
this.item.quality = QUALITY;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void decrementSellInDate() {
|
|
||||||
this.item.sellIn--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user