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

View File

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

View File

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

View File

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

View File

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