mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
quality rules
This commit is contained in:
parent
efac644812
commit
aaa385d397
@ -1,10 +1,19 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import com.gildedrose.rules.QualityRule;
|
||||
import com.gildedrose.rules.SulfurasQualityRule;
|
||||
import lombok.val;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
class GildedRose {
|
||||
Item[] items;
|
||||
|
||||
private final List<QualityRule> rules = List.of(
|
||||
new SulfurasQualityRule(),
|
||||
new QualityRule()
|
||||
);
|
||||
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = items;
|
||||
}
|
||||
@ -17,6 +26,18 @@ class GildedRose {
|
||||
}
|
||||
|
||||
private void processItem(final Item item) {
|
||||
|
||||
var newQuality = rules.stream()
|
||||
.reduce(new QualityRule.Result(item.quality, false),
|
||||
(q, rule) -> {
|
||||
if (q.isFinalValue() || !rule.shouldApply(item.name)) {
|
||||
return q;
|
||||
} else {
|
||||
return rule.calculateQuality(q.getQuality());
|
||||
}
|
||||
},
|
||||
(a, b) -> b).getQuality();
|
||||
|
||||
if (!item.name.equals("Aged Brie")
|
||||
&& !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.quality > 0) {
|
||||
@ -64,6 +85,7 @@ class GildedRose {
|
||||
}
|
||||
}
|
||||
|
||||
item.quality = newQuality;
|
||||
item.sellIn = newSellIn;
|
||||
}
|
||||
|
||||
|
||||
32
Java/src/main/java/com/gildedrose/rules/QualityRule.java
Normal file
32
Java/src/main/java/com/gildedrose/rules/QualityRule.java
Normal file
@ -0,0 +1,32 @@
|
||||
package com.gildedrose.rules;
|
||||
|
||||
import static java.lang.Integer.max;
|
||||
|
||||
public class QualityRule {
|
||||
|
||||
public boolean shouldApply(String itemName) {
|
||||
return true;
|
||||
}
|
||||
|
||||
public Result calculateQuality(int oldQuality) {
|
||||
return new Result(max(oldQuality - 1, 0), false);
|
||||
}
|
||||
|
||||
public static class Result {
|
||||
final int quality;
|
||||
final boolean isFinalValue;
|
||||
|
||||
public Result(int quality, boolean isFinalValue) {
|
||||
this.quality = quality;
|
||||
this.isFinalValue = isFinalValue;
|
||||
}
|
||||
|
||||
public int getQuality() {
|
||||
return quality;
|
||||
}
|
||||
|
||||
public boolean isFinalValue() {
|
||||
return isFinalValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user