mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 14:31:28 +00:00
QualityRule interface, initial backstage pass rule
This commit is contained in:
parent
f60b800cd8
commit
4f28924f7e
@ -1,7 +1,10 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
import com.gildedrose.rules.AgedBrieQualityRule;
|
import com.gildedrose.rules.AgedBrieQualityRule;
|
||||||
|
import com.gildedrose.rules.BackstagePassQualityRule;
|
||||||
|
import com.gildedrose.rules.DefaultQualityRule;
|
||||||
import com.gildedrose.rules.QualityRule;
|
import com.gildedrose.rules.QualityRule;
|
||||||
|
import com.gildedrose.rules.Result;
|
||||||
import com.gildedrose.rules.SulfurasQualityRule;
|
import com.gildedrose.rules.SulfurasQualityRule;
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
|
|
||||||
@ -13,7 +16,8 @@ class GildedRose {
|
|||||||
private final List<QualityRule> rules = List.of(
|
private final List<QualityRule> rules = List.of(
|
||||||
new SulfurasQualityRule(),
|
new SulfurasQualityRule(),
|
||||||
new AgedBrieQualityRule(),
|
new AgedBrieQualityRule(),
|
||||||
new QualityRule()
|
new BackstagePassQualityRule(),
|
||||||
|
new DefaultQualityRule()
|
||||||
);
|
);
|
||||||
|
|
||||||
public GildedRose(Item[] items) {
|
public GildedRose(Item[] items) {
|
||||||
@ -29,13 +33,15 @@ class GildedRose {
|
|||||||
|
|
||||||
private void processItem(final Item item) {
|
private void processItem(final Item item) {
|
||||||
|
|
||||||
|
val newSellIn = calculateSellIn(item.name, item.sellIn);
|
||||||
|
|
||||||
var newQuality = rules.stream()
|
var newQuality = rules.stream()
|
||||||
.reduce(new QualityRule.Result(item.quality, false),
|
.reduce(new Result(item.quality, false),
|
||||||
(q, rule) -> {
|
(q, rule) -> {
|
||||||
if (q.isFinalValue() || !rule.shouldApply(item.name)) {
|
if (q.isFinalValue() || !rule.shouldApply(item.name)) {
|
||||||
return q;
|
return q;
|
||||||
} else {
|
} else {
|
||||||
return rule.calculateQuality(q.getQuality());
|
return rule.calculateQuality(q.getQuality(), newSellIn);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
(a, b) -> b).getQuality();
|
(a, b) -> b).getQuality();
|
||||||
@ -69,7 +75,7 @@ class GildedRose {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
val newSellIn = calculateSellIn(item.name, item.sellIn);
|
|
||||||
|
|
||||||
/* if (newSellIn < 0) {
|
/* if (newSellIn < 0) {
|
||||||
if (!item.name.equals("Aged Brie")) {
|
if (!item.name.equals("Aged Brie")) {
|
||||||
|
|||||||
@ -2,7 +2,7 @@ package com.gildedrose.rules;
|
|||||||
|
|
||||||
import static java.lang.Integer.min;
|
import static java.lang.Integer.min;
|
||||||
|
|
||||||
public class AgedBrieQualityRule extends QualityRule {
|
public class AgedBrieQualityRule implements QualityRule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldApply(String itemName) {
|
public boolean shouldApply(String itemName) {
|
||||||
@ -10,7 +10,7 @@ public class AgedBrieQualityRule extends QualityRule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result calculateQuality(int oldQuality) {
|
public Result calculateQuality(int oldQuality, int sellIn) {
|
||||||
return new Result(min(oldQuality + 1, 50), true);
|
return new Result(min(oldQuality + 1, 50), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.gildedrose.rules;
|
||||||
|
|
||||||
|
import static java.lang.Integer.min;
|
||||||
|
|
||||||
|
public class BackstagePassQualityRule implements QualityRule {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldApply(String itemName) {
|
||||||
|
return "Backstage passes to a TAFKAL80ETC concert".equals(itemName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result calculateQuality(int oldQuality, int sellIn) {
|
||||||
|
final int newQuality = oldQuality + 2;
|
||||||
|
return new Result(min(newQuality, 50), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,17 @@
|
|||||||
|
package com.gildedrose.rules;
|
||||||
|
|
||||||
|
import static java.lang.Integer.max;
|
||||||
|
|
||||||
|
public class DefaultQualityRule implements QualityRule {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean shouldApply(String itemName) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result calculateQuality(int oldQuality, int sellIn) {
|
||||||
|
return new Result(max(oldQuality - 1, 0), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,32 +1,7 @@
|
|||||||
package com.gildedrose.rules;
|
package com.gildedrose.rules;
|
||||||
|
|
||||||
import static java.lang.Integer.max;
|
public interface QualityRule {
|
||||||
|
boolean shouldApply(String itemName);
|
||||||
|
|
||||||
public class QualityRule {
|
Result calculateQuality(int oldQuality, int sellIn);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
19
Java/src/main/java/com/gildedrose/rules/Result.java
Normal file
19
Java/src/main/java/com/gildedrose/rules/Result.java
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package com.gildedrose.rules;
|
||||||
|
|
||||||
|
public 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,6 +1,6 @@
|
|||||||
package com.gildedrose.rules;
|
package com.gildedrose.rules;
|
||||||
|
|
||||||
public class SulfurasQualityRule extends QualityRule {
|
public class SulfurasQualityRule implements QualityRule {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean shouldApply(String itemName) {
|
public boolean shouldApply(String itemName) {
|
||||||
@ -8,7 +8,7 @@ public class SulfurasQualityRule extends QualityRule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result calculateQuality(int oldQuality) {
|
public Result calculateQuality(int oldQuality, int sellIn) {
|
||||||
return new Result(oldQuality, true);
|
return new Result(oldQuality, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user