mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
Template method initialized in order to update items respectively. Each item's quality and sellIn can be updated in a different manner
This commit is contained in:
parent
64853612b0
commit
fa0aa29a17
15
Java/src/main/java/com/gildedrose/AgedBrieUpdater.java
Normal file
15
Java/src/main/java/com/gildedrose/AgedBrieUpdater.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
public class AgedBrieUpdater extends ItemUpdater {
|
||||||
|
@Override
|
||||||
|
void updateQuality(Item item) {
|
||||||
|
if (item.quality < 50) {
|
||||||
|
item.quality += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void updateSellIn(Item item) {
|
||||||
|
item.sellIn -=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
25
Java/src/main/java/com/gildedrose/BackstagePassUpdater.java
Normal file
25
Java/src/main/java/com/gildedrose/BackstagePassUpdater.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
public class BackstagePassUpdater extends ItemUpdater {
|
||||||
|
@Override
|
||||||
|
void updateQuality(Item item) {
|
||||||
|
if (item.sellIn < 0) {
|
||||||
|
item.quality = 0;
|
||||||
|
} else if (item.quality < 50) {
|
||||||
|
item.quality += 1;
|
||||||
|
|
||||||
|
if (item.sellIn < 11 && item.quality < 50) {
|
||||||
|
item.quality += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.sellIn < 6 && item.quality < 50) {
|
||||||
|
item.quality += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void updateSellIn(Item item) {
|
||||||
|
item.sellIn -=1;
|
||||||
|
}
|
||||||
|
}
|
||||||
17
Java/src/main/java/com/gildedrose/ConjuredUpdater.java
Normal file
17
Java/src/main/java/com/gildedrose/ConjuredUpdater.java
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
public class ConjuredUpdater extends ItemUpdater {
|
||||||
|
@Override
|
||||||
|
void updateQuality(Item item) {
|
||||||
|
if (item.quality > 0) {
|
||||||
|
item.quality -= 2;
|
||||||
|
if (item.quality < 0 )
|
||||||
|
item.quality =0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void updateSellIn(Item item) {
|
||||||
|
item.sellIn -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
16
Java/src/main/java/com/gildedrose/GildedRosePrototype.java
Normal file
16
Java/src/main/java/com/gildedrose/GildedRosePrototype.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
class GildedRosePrototype {
|
||||||
|
Item[] items;
|
||||||
|
|
||||||
|
public GildedRosePrototype(Item[] items) {
|
||||||
|
this.items = items;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateQuality() {
|
||||||
|
for (Item item : items) {
|
||||||
|
ItemUpdaterFactory.getItemUpdater(item)
|
||||||
|
.updateStateFor(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Java/src/main/java/com/gildedrose/ItemUpdater.java
Normal file
10
Java/src/main/java/com/gildedrose/ItemUpdater.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
public abstract class ItemUpdater {
|
||||||
|
public void updateStateFor(Item item){
|
||||||
|
updateSellIn(item);
|
||||||
|
updateQuality(item);
|
||||||
|
}
|
||||||
|
abstract void updateQuality(Item item);
|
||||||
|
abstract void updateSellIn(Item item);
|
||||||
|
}
|
||||||
38
Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java
Normal file
38
Java/src/main/java/com/gildedrose/ItemUpdaterFactory.java
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public class ItemUpdaterFactory {
|
||||||
|
|
||||||
|
private static final Map<String, ItemUpdater> registeredCustomUpdaters = new HashMap<>();
|
||||||
|
static {
|
||||||
|
registeredCustomUpdaters.put("Aged Brie", new AgedBrieUpdater());
|
||||||
|
registeredCustomUpdaters.put("Backstage passes to a TAFKAL80ETC concert", new BackstagePassUpdater());
|
||||||
|
registeredCustomUpdaters.put("Sulfuras, Hand of Ragnaros", new SulfurasUpdater());
|
||||||
|
registeredCustomUpdaters.put("Conjured", new ConjuredUpdater());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void registerCustomUpdater(String type, ItemUpdater updater ){
|
||||||
|
registeredCustomUpdaters.put(type, updater);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ItemUpdater getItemUpdater(Item item) {
|
||||||
|
return Optional.ofNullable(registeredCustomUpdaters.get(item.name))
|
||||||
|
.orElse(new StandardItemUpdater());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*public static ItemUpdater getItemUpdater_(Item item) {
|
||||||
|
if ("Aged Brie".equals(item.name))
|
||||||
|
return new AgedBrieUpdater();
|
||||||
|
else if ("Backstage passes to a TAFKAL80ETC concert".equals(item.name))
|
||||||
|
return new BackstagePassUpdater();
|
||||||
|
else if ("Sulfuras, Hand of Ragnaros".equals(item.name))
|
||||||
|
return new SulfurasUpdater();
|
||||||
|
else if ("Conjured".equals(item.name))
|
||||||
|
return new ConjuredUpdater();
|
||||||
|
else
|
||||||
|
return new StandardItemUpdater();
|
||||||
|
}*/
|
||||||
|
}
|
||||||
16
Java/src/main/java/com/gildedrose/StandardItemUpdater.java
Normal file
16
Java/src/main/java/com/gildedrose/StandardItemUpdater.java
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
public class StandardItemUpdater extends ItemUpdater{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void updateQuality(Item item) {
|
||||||
|
if (item.quality > 0) {
|
||||||
|
item.quality -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void updateSellIn(Item item) {
|
||||||
|
item.sellIn -= 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
13
Java/src/main/java/com/gildedrose/SulfurasUpdater.java
Normal file
13
Java/src/main/java/com/gildedrose/SulfurasUpdater.java
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
public class SulfurasUpdater extends ItemUpdater {
|
||||||
|
@Override
|
||||||
|
void updateQuality(Item item) {
|
||||||
|
System.out.println("########Sulfuras is a legendary product");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
void updateSellIn(Item item) {
|
||||||
|
System.out.println("########Never gets old");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -13,6 +13,8 @@ public class TexttestFixture {
|
|||||||
new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
|
new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
|
||||||
new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
|
new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
|
||||||
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
|
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
|
||||||
|
new Item("Backstage passes to a TAFKAL80ETC concert", 1, 30),
|
||||||
|
new Item("Backstage passes to a TAFKAL80ETC concert", 0, 30),
|
||||||
// this conjured item does not work properly yet
|
// this conjured item does not work properly yet
|
||||||
new Item("Conjured Mana Cake", 3, 6) };
|
new Item("Conjured Mana Cake", 3, 6) };
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user