Use interface over abstract class

This commit is contained in:
Richard Xu 2022-12-23 16:47:57 -05:00
parent 0dca9b86e1
commit 3724286701
9 changed files with 53 additions and 35 deletions

View File

@ -1,6 +1,6 @@
package com.gildedrose; package com.gildedrose;
public class AgedBrieItemHandler extends ItemHandler { public class AgedBrieItemHandler implements ItemHandler {
public AgedBrieItemHandler() {} public AgedBrieItemHandler() {}

View File

@ -1,6 +1,6 @@
package com.gildedrose; package com.gildedrose;
public class BackstagePassesItemHandler extends ItemHandler { public class BackstagePassesItemHandler implements ItemHandler {
@Override @Override
public void handleDay(Item item) { public void handleDay(Item item) {

View File

@ -1,6 +1,7 @@
package com.gildedrose; package com.gildedrose;
public class ConjuredItemHandler extends ItemHandler { public class ConjuredItemHandler implements ItemHandler {
@Override @Override
public void handleDay(Item item) { public void handleDay(Item item) {
item.quality -= 2; item.quality -= 2;

View File

@ -1,6 +1,6 @@
package com.gildedrose; package com.gildedrose;
public class GenericItemHandler extends ItemHandler { public class GenericItemHandler implements ItemHandler {
@Override @Override
public void handleDay(Item item) { public void handleDay(Item item) {

View File

@ -1,7 +1,5 @@
package com.gildedrose; package com.gildedrose;
public abstract class ItemHandler { public interface ItemHandler {
void handleDay(Item item);
public void handleDay(Item item) {
}
} }

View File

@ -4,7 +4,6 @@ import java.lang.reflect.InvocationTargetException;
import java.util.Map; import java.util.Map;
public class ItemHandlerFactory { public class ItemHandlerFactory {
private static final Map<ItemType, Class<? extends ItemHandler>> ITEM_HANDLER_MAP = Map.of( private static final Map<ItemType, Class<? extends ItemHandler>> ITEM_HANDLER_MAP = Map.of(
ItemType.AGED_BRIE, ItemType.AGED_BRIE,
AgedBrieItemHandler.class, AgedBrieItemHandler.class,

View File

@ -18,7 +18,9 @@ public enum ItemType {
public static ItemType forDisplayName(String displayName) { public static ItemType forDisplayName(String displayName) {
return Arrays return Arrays
.stream(ItemType.values()) .stream(ItemType.values())
.filter(itemType -> itemType.getDisplayName().equals(displayName)).findFirst().orElse(GENERIC); .filter(itemType -> itemType.getDisplayName().equals(displayName))
.findFirst()
.orElse(GENERIC);
} }
public String getDisplayName() { public String getDisplayName() {

View File

@ -1,3 +1,7 @@
package com.gildedrose; package com.gildedrose;
public class SulfurasItemHandler extends ItemHandler {} public class SulfurasItemHandler implements ItemHandler {
@Override
public void handleDay(Item item) {}
}

View File

@ -1,15 +1,17 @@
package com.gildedrose; package com.gildedrose;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class GildedRoseTest { class GildedRoseTest {
private static final int SULFURAS_QUALITY = 80; private static final int SULFURAS_QUALITY = 80;
@Test @Test
public void agedBrieIncreasesInQualityByOneEachDay() { public void agedBrieIncreasesInQualityByOneEachDay() {
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 2, 0)}; Item[] items = new Item[] {
new Item(ItemType.AGED_BRIE.getDisplayName(), 2, 0)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(1, app.items.get(0).quality); assertEquals(1, app.items.get(0).quality);
@ -109,7 +111,9 @@ class GildedRoseTest {
@Test @Test
public void qualityIsNeverOverFiftyForAgedBrie() { public void qualityIsNeverOverFiftyForAgedBrie() {
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 50)}; Item[] items = new Item[] {
new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 50)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(50, app.items.get(0).quality); assertEquals(50, app.items.get(0).quality);
@ -121,7 +125,9 @@ class GildedRoseTest {
@Test @Test
public void qualityIsNeverOverFiftyForBackstagePasses() { public void qualityIsNeverOverFiftyForBackstagePasses() {
Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 50)}; Item[] items = new Item[] {
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 50)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(50, app.items.get(0).quality); assertEquals(50, app.items.get(0).quality);
@ -157,7 +163,9 @@ class GildedRoseTest {
@Test @Test
public void sellInDateDecreasesByOneEachDayForAgedBrie() { public void sellInDateDecreasesByOneEachDayForAgedBrie() {
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 1)}; Item[] items = new Item[] {
new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 1)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(4, app.items.get(0).sellIn); assertEquals(4, app.items.get(0).sellIn);
@ -169,7 +177,9 @@ class GildedRoseTest {
@Test @Test
public void sellInDateDecreasesByOneEachDayForBackstagePasses() { public void sellInDateDecreasesByOneEachDayForBackstagePasses() {
Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 1)}; Item[] items = new Item[] {
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 1)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(4, app.items.get(0).sellIn); assertEquals(4, app.items.get(0).sellIn);
@ -205,7 +215,9 @@ class GildedRoseTest {
@Test @Test
public void sellInDateCanBeNegativeForAgedBrie() { public void sellInDateCanBeNegativeForAgedBrie() {
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 1, 1)}; Item[] items = new Item[] {
new Item(ItemType.AGED_BRIE.getDisplayName(), 1, 1)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(0, app.items.get(0).sellIn); assertEquals(0, app.items.get(0).sellIn);
@ -217,7 +229,9 @@ class GildedRoseTest {
@Test @Test
public void sellInDateCanBeNegativeForBackStagePasses() { public void sellInDateCanBeNegativeForBackStagePasses() {
Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 1, 1)}; Item[] items = new Item[] {
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 1, 1)
};
GildedRose app = new GildedRose(items); GildedRose app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
assertEquals(0, app.items.get(0).sellIn); assertEquals(0, app.items.get(0).sellIn);