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", 10, 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
|
||||
new Item("Conjured Mana Cake", 3, 6) };
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user