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;
public class AgedBrieUpdateStrategy implements ItemUpdateStrategy {
public class AgedBrieUpdateStrategy extends AbstractItemUpdateStrategy {
@Override
public void update(Item item) {
if (item.quality < 50) {
item.quality += 1;
}
item.sellIn -= 1;
incrementQualityIfLessThanMax(item);
decrementSellIn(item);
if (item.sellIn < 0) {
if (item.quality < 50) {
item.quality += 1;
}
incrementQualityIfLessThanMax(item);
}
}
}

View File

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

View File

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