mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 23:41:27 +00:00
Add item handler factory
This commit is contained in:
parent
cb1aa70657
commit
0dca9b86e1
@ -1,49 +1,20 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
class GildedRose {
|
class GildedRose {
|
||||||
private static final Map<ItemType, Class<? extends ItemHandler>> ITEM_HANDLER_MAP = Map.of(
|
final List<Item> items;
|
||||||
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;
|
|
||||||
|
|
||||||
public GildedRose(Item[] items) {
|
public GildedRose(Item[] items) {
|
||||||
this.items = Arrays.asList(items);
|
this.items = Arrays.asList(items);
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: refactor this to use Guice
|
public void updateQuality() {
|
||||||
private static void handleDay(Item item) {
|
items.forEach(this::handleDay);
|
||||||
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() {
|
private void handleDay(Item item) {
|
||||||
items.forEach(GildedRose::handleDay);
|
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