mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
Extract the standard Gilded Rose item behaviour
This commit is contained in:
parent
31d2cb5a7b
commit
ce308107f2
@ -1,5 +1,10 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import com.gildedrose.items.GildedRoseItem;
|
||||
import com.gildedrose.items.GildedRoseItemFactory;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
class GildedRose {
|
||||
Item[] items;
|
||||
|
||||
@ -8,55 +13,11 @@ class GildedRose {
|
||||
}
|
||||
|
||||
public void updateQuality() {
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
if (!items[i].name.equals("Aged Brie")
|
||||
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (items[i].quality > 0) {
|
||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
items[i].quality = items[i].quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
|
||||
if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (items[i].sellIn < 11) {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (items[i].sellIn < 6) {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
items[i].sellIn = items[i].sellIn - 1;
|
||||
}
|
||||
|
||||
if (items[i].sellIn < 0) {
|
||||
if (!items[i].name.equals("Aged Brie")) {
|
||||
if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (items[i].quality > 0) {
|
||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
items[i].quality = items[i].quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
items[i].quality = items[i].quality - items[i].quality;
|
||||
}
|
||||
} else {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
items = Arrays.stream(items)
|
||||
.map(GildedRoseItemFactory::create)
|
||||
.map(GildedRoseItem::updateQuality)
|
||||
.map(GildedRoseItem::getItem)
|
||||
.toArray(Item[]::new);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public abstract class AbstractGildedRoseItem implements GildedRoseItem{
|
||||
|
||||
protected final Item item;
|
||||
|
||||
public AbstractGildedRoseItem(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItem() {
|
||||
return item;
|
||||
}
|
||||
}
|
||||
10
Java/src/main/java/com/gildedrose/items/GildedRoseItem.java
Normal file
10
Java/src/main/java/com/gildedrose/items/GildedRoseItem.java
Normal file
@ -0,0 +1,10 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public interface GildedRoseItem {
|
||||
|
||||
Item getItem();
|
||||
GildedRoseItem updateQuality();
|
||||
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static java.util.regex.Pattern.CASE_INSENSITIVE;
|
||||
|
||||
public class GildedRoseItemFactory {
|
||||
|
||||
static final Pattern LEGENDARY_NAME_PATTERN = Pattern.compile("Sulfuras.*", CASE_INSENSITIVE);
|
||||
static final Pattern AGING_ITEM = Pattern.compile("", CASE_INSENSITIVE);
|
||||
static final Pattern CONJURED_ITEM = Pattern.compile("Conjured.*", CASE_INSENSITIVE);
|
||||
|
||||
public static GildedRoseItem create(Item item) {
|
||||
if (LEGENDARY_NAME_PATTERN.matcher(item.name).matches()
|
||||
|| AGING_ITEM.matcher(item.name).matches()
|
||||
|| CONJURED_ITEM.matcher(item.name).matches()) {
|
||||
return new NonStandardGildedRoseItem(item);
|
||||
} else {
|
||||
return new StandardGildedRoseItem(item);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,67 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public class NonStandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||
|
||||
public NonStandardGildedRoseItem(Item item) {
|
||||
super(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GildedRoseItem updateQuality() {
|
||||
legacyUpdateQuality(item);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void legacyUpdateQuality(Item item) {
|
||||
if (!item.name.equals("Aged Brie")
|
||||
&& !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.quality > 0) {
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
|
||||
if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.sellIn < 11) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (item.sellIn < 6) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
}
|
||||
|
||||
if (item.sellIn < 0) {
|
||||
if (!item.name.equals("Aged Brie")) {
|
||||
if (!item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.quality > 0) {
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
item.quality = item.quality - item.quality;
|
||||
}
|
||||
} else {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,19 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public class StandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||
|
||||
private final static int MAX_QUALITY = 50;
|
||||
|
||||
public StandardGildedRoseItem(Item item) {
|
||||
super(item);
|
||||
item.quality = Math.min(item.quality, MAX_QUALITY);
|
||||
}
|
||||
|
||||
public GildedRoseItem updateQuality() {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
item.quality = item.sellIn < 0 ? Math.max(item.quality - 2, 0) : Math.max(item.quality - 1, 0);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user