From 7b4a1b6c3be844d0e6e752b4956702d4d3f9632e Mon Sep 17 00:00:00 2001 From: Gabba Date: Mon, 18 Dec 2017 15:33:14 +0000 Subject: [PATCH] replaces if-statements with Map in Factory Class --- .../main/java/com/gildedrose/GildedRose.java | 9 ++++--- .../item/CustomisedItemFactory.java | 26 ++++++++++++------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index da3e65a7..b2be1de8 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,6 @@ package com.gildedrose; +import com.gildedrose.item.CustomisedItem; import com.gildedrose.item.Item; import com.gildedrose.item.CustomisedItemFactory; import com.gildedrose.item.QualityValues; @@ -7,17 +8,15 @@ import com.gildedrose.item.QualityValues; class GildedRose { private static final int LOWEST_QUALITY_VALUE_POSSIBLE = 0; - private final CustomisedItemFactory customisedItemFactory; Item[] items; public GildedRose(Item[] items) { - this.customisedItemFactory = new CustomisedItemFactory(); this.items = items; } public void updateQuality() { for (Item item : items) { - customisedItemFactory.customiseItem(item).updateState(); + customisedItem(item).updateState(); if (hasReachedLowestQualityValue(item)) { item.quality = LOWEST_QUALITY_VALUE_POSSIBLE; } else if (hasReachedHighestQualityValue(item)) { @@ -26,6 +25,10 @@ class GildedRose { } } + private CustomisedItem customisedItem(Item item) { + return new CustomisedItemFactory(item).customiseItem(item); + } + private boolean hasReachedLowestQualityValue(Item item) { return item.quality < LOWEST_QUALITY_VALUE_POSSIBLE; } diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index c99bce7d..1d5c143e 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -1,23 +1,31 @@ package com.gildedrose.item; +import java.util.HashMap; +import java.util.Map; + public class CustomisedItemFactory { + 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 CustomisedItem customiseItem(Item item) { - if (item.name.equals(SULFURAS)) { - return new Sulfuras(); - } else if (item.name.equals(BRIE)) { - return new AgedBrie(item); - } else if (item.name.equals(BACKSTAGE_PASSES_ITEM)) { - return new BackstagePassesItem(item); - } else if (item.name.equals(CONJURED_ITEM)) { - return new ConjuredItem(item); - } else { + if (isStandardItem(item)) { return new StandardItem(item); } + return ITEM_TYPES_LIST.get(item.name); + } + + private boolean isStandardItem(Item item) { + return !ITEM_TYPES_LIST.keySet().contains(item.name); } }