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:
Erol Shaban 2019-08-21 09:14:01 +02:00
parent 64853612b0
commit fa0aa29a17
9 changed files with 152 additions and 0 deletions

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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);
}
}
}

View 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);
}

View 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();
}*/
}

View 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;
}
}

View 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");
}
}

View File

@ -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) };