From 9b308c8e2212a2343490d88c5463737c81ebea86 Mon Sep 17 00:00:00 2001 From: Gabba Date: Fri, 12 Jan 2018 15:38:43 +0000 Subject: [PATCH] different implementation of constructor --- .../main/java/com/gildedrose/GildedRose.java | 8 +++---- .../item/CustomisedItemFactory.java | 22 ++++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 596856f7..8d6e5cb9 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -7,15 +7,17 @@ import com.gildedrose.item.QualityValues; class GildedRose { + private final CustomisedItemFactory itemFactory; Item[] items; public GildedRose(Item[] items) { this.items = items; + this.itemFactory = new CustomisedItemFactory(); } public void updateQuality() { for (Item item : items) { - customisedItem(item).updateState(); + itemFactory.customiseItem(item).updateState(); if (hasReachedLowestQualityValue(item)) { item.quality = QualityValues.lowestValuePossible(); } else if (hasReachedHighestQualityValue(item)) { @@ -24,10 +26,6 @@ class GildedRose { } } - private CustomisedItem customisedItem(Item item) { - return new CustomisedItemFactory(item).customiseItem(item); - } - private boolean hasReachedLowestQualityValue(Item item) { return item.quality < QualityValues.lowestValuePossible(); } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index 1d5c143e..e4864475 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -2,30 +2,32 @@ package com.gildedrose.item; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; public class CustomisedItemFactory { - private final static Map ITEM_TYPES_LIST = new HashMap<>(); + private final static Map> ITEM_TYPES_LIST = new HashMap<>(); public final static String SULFURAS = "Sulfuras, Hand of Ragnaros"; public final static String BRIE = "Aged Brie"; public final static String BACKSTAGE_PASSES_ITEM = "Backstage passes to a TAFKAL80ETC concert"; public final static String CONJURED_ITEM = "Conjured"; - public CustomisedItemFactory(Item item) { - ITEM_TYPES_LIST.put(SULFURAS, new Sulfuras()); - ITEM_TYPES_LIST.put(BRIE, new AgedBrie(item)); - ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, new BackstagePassesItem(item)); - ITEM_TYPES_LIST.put(CONJURED_ITEM, new ConjuredItem(item)); + public CustomisedItemFactory() { + ITEM_TYPES_LIST.put(SULFURAS, (item) -> new Sulfuras()); + ITEM_TYPES_LIST.put(BRIE, AgedBrie::new); + ITEM_TYPES_LIST.put(BACKSTAGE_PASSES_ITEM, BackstagePassesItem::new); + ITEM_TYPES_LIST.put(CONJURED_ITEM, ConjuredItem::new); } public CustomisedItem customiseItem(Item item) { - if (isStandardItem(item)) { + String name = item.name; + if (isStandardItem(name)) { return new StandardItem(item); } - return ITEM_TYPES_LIST.get(item.name); + return ITEM_TYPES_LIST.get(name).apply(item); } - private boolean isStandardItem(Item item) { - return !ITEM_TYPES_LIST.keySet().contains(item.name); + private boolean isStandardItem(String name) { + return !ITEM_TYPES_LIST.keySet().contains(name); } }