mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +00:00
Refactored quality update using strategy and factory patterns
This commit is contained in:
parent
2a60407d6b
commit
5f8918b3f0
@ -11,6 +11,7 @@ dependencies {
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-params:5.7.0'
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
|
||||
testImplementation 'com.approvaltests:approvaltests:9.3.0'
|
||||
testCompile group: 'org.assertj', name: 'assertj-core', version: '3.17.2'
|
||||
}
|
||||
|
||||
group = 'com.gildedrose'
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class AgedBrieQualityUpdater implements ItemQualityUpdater {
|
||||
|
||||
private final Item item;
|
||||
|
||||
public AgedBrieQualityUpdater(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateQuality() {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
|
||||
item.sellIn = item.sellIn - 1;
|
||||
|
||||
if (item.sellIn < 0) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class BackstageBrieQualityUpdater implements ItemQualityUpdater {
|
||||
|
||||
private final Item item;
|
||||
|
||||
public BackstageBrieQualityUpdater(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateQuality() {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
item.sellIn = item.sellIn - 1;
|
||||
|
||||
if (item.sellIn < 0) {
|
||||
item.quality = 0;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
25
Java/src/main/java/com/gildedrose/DefaultQualityUpdater.java
Normal file
25
Java/src/main/java/com/gildedrose/DefaultQualityUpdater.java
Normal file
@ -0,0 +1,25 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class DefaultQualityUpdater implements ItemQualityUpdater {
|
||||
|
||||
private final Item item;
|
||||
|
||||
public DefaultQualityUpdater(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateQuality() {
|
||||
if (item.quality > 0) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
|
||||
item.sellIn = item.sellIn - 1;
|
||||
|
||||
if (item.sellIn < 0) {
|
||||
if (item.quality > 0) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,62 +1,23 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import static com.gildedrose.ItemQualityUpdateStrategyFactory.itemQualityUpdaterFor;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
class GildedRose {
|
||||
Item[] items;
|
||||
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = items;
|
||||
}
|
||||
Item[] items;
|
||||
|
||||
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;
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
public void updateQuality() {
|
||||
Arrays.stream(items).forEach(this::updateQuality);
|
||||
}
|
||||
|
||||
if (items[i].sellIn < 6) {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private void updateQuality(Item item) {
|
||||
itemQualityUpdaterFor(item).updateQuality();
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,12 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class ItemQualityUpdateStrategyFactory {
|
||||
public static ItemQualityUpdater itemQualityUpdaterFor(Item item) {
|
||||
switch (item.name) {
|
||||
case "Sulfuras, Hand of Ragnaros": return new SulfrasQualityUpdater(item);
|
||||
case "Aged Brie": return new AgedBrieQualityUpdater(item);
|
||||
case "Backstage passes to a TAFKAL80ETC concert": return new BackstageBrieQualityUpdater(item);
|
||||
default: return new DefaultQualityUpdater(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,5 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public interface ItemQualityUpdater {
|
||||
void updateQuality();
|
||||
}
|
||||
13
Java/src/main/java/com/gildedrose/SulfrasQualityUpdater.java
Normal file
13
Java/src/main/java/com/gildedrose/SulfrasQualityUpdater.java
Normal file
@ -0,0 +1,13 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class SulfrasQualityUpdater implements ItemQualityUpdater {
|
||||
|
||||
private final Item item;
|
||||
|
||||
public SulfrasQualityUpdater(Item item) {
|
||||
this.item = item;
|
||||
}
|
||||
|
||||
public void updateQuality() {
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class ItemQualityUpdateStrategyFactoryTest {
|
||||
|
||||
@Test
|
||||
void itemQualityUpdaterFor() {
|
||||
testFactoryFor("Sulfuras, Hand of Ragnaros", SulfrasQualityUpdater.class);
|
||||
testFactoryFor("Aged Brie", AgedBrieQualityUpdater.class);
|
||||
testFactoryFor("Backstage passes to a TAFKAL80ETC concert", BackstageBrieQualityUpdater.class);
|
||||
testFactoryFor("xyz", DefaultQualityUpdater.class);
|
||||
}
|
||||
|
||||
void testFactoryFor(String name, Class<? extends ItemQualityUpdater> clazz) {
|
||||
ItemQualityUpdater qualityUpdater = ItemQualityUpdateStrategyFactory
|
||||
.itemQualityUpdaterFor(new Item(name, 0, 0));
|
||||
assertThat(qualityUpdater).isInstanceOf(clazz);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user