Add AbstractItemUpdateStrategy and refactor ItemUpdateStrategy subclasses

This commit is contained in:
doxxx 2023-10-10 17:10:14 +09:00
parent 8b57050790
commit 322a99982b
5 changed files with 37 additions and 30 deletions

View File

@ -0,0 +1,18 @@
package com.gildedrose.strategy;
import com.gildedrose.Item;
public abstract class AbstractItemUpdateStrategy implements ItemUpdateStrategy {
protected static final int MAX_QUALITY = 50;
protected static final int MIN_QUALITY = 0;
protected void incrementQualityIfLessThanMax(Item item) {
if (item.quality < MAX_QUALITY) {
item.quality += 1;
}
}
protected void decrementSellIn(Item item) {
item.sellIn -= 1;
}
}

View File

@ -2,19 +2,14 @@ package com.gildedrose.strategy;
import com.gildedrose.Item; import com.gildedrose.Item;
public class AgedBrieUpdateStrategy implements ItemUpdateStrategy { public class AgedBrieUpdateStrategy extends AbstractItemUpdateStrategy {
@Override @Override
public void update(Item item) { public void update(Item item) {
if (item.quality < 50) { incrementQualityIfLessThanMax(item);
item.quality += 1; decrementSellIn(item);
}
item.sellIn -= 1;
if (item.sellIn < 0) { if (item.sellIn < 0) {
if (item.quality < 50) { incrementQualityIfLessThanMax(item);
item.quality += 1;
}
} }
} }
} }

View File

@ -2,29 +2,23 @@ package com.gildedrose.strategy;
import com.gildedrose.Item; import com.gildedrose.Item;
public class BackstagePassesUpdateStrategy implements ItemUpdateStrategy { public class BackstagePassesUpdateStrategy extends AbstractItemUpdateStrategy {
@Override @Override
public void update(Item item) { public void update(Item item) {
if (item.quality < 50) { incrementQualityIfLessThanMax(item);
item.quality += 1;
if (item.sellIn < 11) { if (item.sellIn < 11) {
if (item.quality < 50) { incrementQualityIfLessThanMax(item);
item.quality += 1;
}
}
if (item.sellIn < 6) {
if (item.quality < 50) {
item.quality += 1;
}
}
} }
item.sellIn -= 1; if (item.sellIn < 6) {
incrementQualityIfLessThanMax(item);
}
decrementSellIn(item);
if (item.sellIn < 0) { if (item.sellIn < 0) {
item.quality = 0; item.quality = MIN_QUALITY;
} }
} }
} }

View File

@ -2,14 +2,14 @@ package com.gildedrose.strategy;
import com.gildedrose.Item; import com.gildedrose.Item;
public class StandardItemUpdateStrategy implements ItemUpdateStrategy { public class StandardItemUpdateStrategy extends AbstractItemUpdateStrategy {
@Override @Override
public void update(Item item) { public void update(Item item) {
item.sellIn -= 1; decrementSellIn(item);
if (item.quality > 0) { if (item.quality > MIN_QUALITY) {
item.quality -= 1; item.quality -= 1;
} }
if (item.sellIn < 0 && item.quality > 0) { if (item.sellIn < 0 && item.quality > MIN_QUALITY) {
item.quality -= 1; item.quality -= 1;
} }
} }

View File

@ -2,7 +2,7 @@ package com.gildedrose.strategy;
import com.gildedrose.Item; import com.gildedrose.Item;
public class SulfurasUpdateStrategy implements ItemUpdateStrategy { public class SulfurasUpdateStrategy extends AbstractItemUpdateStrategy {
@Override @Override
public void update(Item item) { public void update(Item item) {
// "Sulfuras, Hand of Ragnaros" 판매일과 품질이 변하지 않음 // "Sulfuras, Hand of Ragnaros" 판매일과 품질이 변하지 않음