mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-16 06:51:27 +00:00
Add item handler factory
This commit is contained in:
parent
cb1aa70657
commit
0dca9b86e1
@ -1,49 +1,20 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
class GildedRose {
|
||||
private static final Map<ItemType, Class<? extends ItemHandler>> ITEM_HANDLER_MAP = Map.of(
|
||||
ItemType.AGED_BRIE,
|
||||
AgedBrieItemHandler.class,
|
||||
ItemType.SULFURAS,
|
||||
SulfurasItemHandler.class,
|
||||
ItemType.BACKSTAGE_PASSES,
|
||||
BackstagePassesItemHandler.class,
|
||||
ItemType.CONJURED,
|
||||
ConjuredItemHandler.class,
|
||||
ItemType.GENERIC,
|
||||
GenericItemHandler.class
|
||||
);
|
||||
// make package-private
|
||||
public final List<Item> items;
|
||||
final List<Item> items;
|
||||
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = Arrays.asList(items);
|
||||
}
|
||||
|
||||
// todo: refactor this to use Guice
|
||||
private static void handleDay(Item item) {
|
||||
try {
|
||||
ItemHandler itemHandler = ITEM_HANDLER_MAP
|
||||
.get(ItemType.forDisplayName(item.name))
|
||||
.getDeclaredConstructor()
|
||||
.newInstance();
|
||||
itemHandler.handleDay(item);
|
||||
} catch (
|
||||
InstantiationException
|
||||
| IllegalAccessException
|
||||
| InvocationTargetException
|
||||
| NoSuchMethodException e
|
||||
) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
public void updateQuality() {
|
||||
items.forEach(this::handleDay);
|
||||
}
|
||||
|
||||
public void updateQuality() {
|
||||
items.forEach(GildedRose::handleDay);
|
||||
private void handleDay(Item item) {
|
||||
ItemHandlerFactory.getItemHandler(item).handleDay(item);
|
||||
}
|
||||
}
|
||||
|
||||
37
Java/src/main/java/com/gildedrose/ItemHandlerFactory.java
Normal file
37
Java/src/main/java/com/gildedrose/ItemHandlerFactory.java
Normal file
@ -0,0 +1,37 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.util.Map;
|
||||
|
||||
public class ItemHandlerFactory {
|
||||
|
||||
private static final Map<ItemType, Class<? extends ItemHandler>> ITEM_HANDLER_MAP = Map.of(
|
||||
ItemType.AGED_BRIE,
|
||||
AgedBrieItemHandler.class,
|
||||
ItemType.SULFURAS,
|
||||
SulfurasItemHandler.class,
|
||||
ItemType.BACKSTAGE_PASSES,
|
||||
BackstagePassesItemHandler.class,
|
||||
ItemType.CONJURED,
|
||||
ConjuredItemHandler.class,
|
||||
ItemType.GENERIC,
|
||||
GenericItemHandler.class
|
||||
);
|
||||
|
||||
// todo: use guice
|
||||
public static ItemHandler getItemHandler(Item item) {
|
||||
try {
|
||||
return ITEM_HANDLER_MAP
|
||||
.get(ItemType.forDisplayName(item.name))
|
||||
.getDeclaredConstructor()
|
||||
.newInstance();
|
||||
} catch (
|
||||
InstantiationException
|
||||
| IllegalAccessException
|
||||
| InvocationTargetException
|
||||
| NoSuchMethodException e
|
||||
) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user