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;
public class AgedBrieItemHandler extends ItemHandler {
public class AgedBrieItemHandler implements ItemHandler {
public AgedBrieItemHandler() {}

View File

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

View File

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

View File

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

View File

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

View File

@ -4,7 +4,6 @@ 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,

View File

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

View File

@ -1,3 +1,7 @@
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;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
class GildedRoseTest {
private static final int SULFURAS_QUALITY = 80;
@Test
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);
app.updateQuality();
assertEquals(1, app.items.get(0).quality);
@ -20,7 +22,7 @@ class GildedRoseTest {
@Test
public void sulfurasSellInDateNeverChanges() {
int sellIn = 10;
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item(ItemType.SULFURAS.getDisplayName(), sellIn, SULFURAS_QUALITY)
};
GildedRose app = new GildedRose(items);
@ -32,7 +34,7 @@ class GildedRoseTest {
@Test
public void sulfurasValueNeverChanges() {
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item(ItemType.SULFURAS.getDisplayName(), 10, SULFURAS_QUALITY)
};
GildedRose app = new GildedRose(items);
@ -44,7 +46,7 @@ class GildedRoseTest {
@Test
public void sulfurasValueIsAlways80() {
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item(ItemType.SULFURAS.getDisplayName(), 10, SULFURAS_QUALITY)
};
GildedRose app = new GildedRose(items);
@ -55,7 +57,7 @@ class GildedRoseTest {
@Test
public void backstagePassesQualityIncreasesByTwoWhenThereAreTenDaysOrLessBeforeTheConcert() {
int quality = 0;
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 10, quality)
};
GildedRose app = new GildedRose(items);
@ -68,7 +70,7 @@ class GildedRoseTest {
@Test
public void backstagePassesQualityIncreasesByThreeWhenThereAreFiveDaysOrLessBeforeTheConcert() {
int quality = 0;
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, quality)
};
GildedRose app = new GildedRose(items);
@ -83,7 +85,7 @@ class GildedRoseTest {
@Test
public void backstagePassesQualityDropsToZeroAfterTheConcert() {
int quality = 10;
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 1, quality)
};
GildedRose app = new GildedRose(items);
@ -97,7 +99,7 @@ class GildedRoseTest {
public void qualityIsNeverNegativeForGenericItems() {
// todo: should add a similar case for conjured
int quality = 1;
Item[] items = new Item[]{new Item("generic item", 5, quality)};
Item[] items = new Item[] { new Item("generic item", 5, quality) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items.get(0).quality);
@ -109,7 +111,9 @@ class GildedRoseTest {
@Test
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);
app.updateQuality();
assertEquals(50, app.items.get(0).quality);
@ -121,7 +125,9 @@ class GildedRoseTest {
@Test
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);
app.updateQuality();
assertEquals(50, app.items.get(0).quality);
@ -133,7 +139,7 @@ class GildedRoseTest {
@Test
public void qualityDecreasesByOneEachDayForGenericItems() {
Item[] items = new Item[]{new Item("generic item", 5, 5)};
Item[] items = new Item[] { new Item("generic item", 5, 5) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(4, app.items.get(0).quality);
@ -145,7 +151,7 @@ class GildedRoseTest {
@Test
public void qualityDecreasesByTwoEachDayForGenericItemsAfterSellInDate() {
Item[] items = new Item[]{new Item("generic item", 1, 6)};
Item[] items = new Item[] { new Item("generic item", 1, 6) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(5, app.items.get(0).quality);
@ -157,7 +163,9 @@ class GildedRoseTest {
@Test
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);
app.updateQuality();
assertEquals(4, app.items.get(0).sellIn);
@ -169,7 +177,9 @@ class GildedRoseTest {
@Test
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);
app.updateQuality();
assertEquals(4, app.items.get(0).sellIn);
@ -181,7 +191,7 @@ class GildedRoseTest {
@Test
public void sellInDateDecreasesByOneEachDayForGenericItems() {
Item[] items = new Item[]{new Item("generic item", 5, 1)};
Item[] items = new Item[] { new Item("generic item", 5, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(4, app.items.get(0).sellIn);
@ -193,7 +203,7 @@ class GildedRoseTest {
@Test
public void sellInDateCanBeNegativeForGenericItems() {
Item[] items = new Item[]{new Item("generic item", 1, 1)};
Item[] items = new Item[] { new Item("generic item", 1, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items.get(0).sellIn);
@ -205,7 +215,9 @@ class GildedRoseTest {
@Test
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);
app.updateQuality();
assertEquals(0, app.items.get(0).sellIn);
@ -217,7 +229,9 @@ class GildedRoseTest {
@Test
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);
app.updateQuality();
assertEquals(0, app.items.get(0).sellIn);
@ -229,7 +243,7 @@ class GildedRoseTest {
@Test
public void itUpdatesAllItemsPassedIn() {
Item[] items = new Item[]{
Item[] items = new Item[] {
new Item("generic item 1", 5, 5),
new Item("generic item 2", 5, 10)
};
@ -247,7 +261,7 @@ class GildedRoseTest {
@Test
public void conjuredItemsDecreaseByTwoEachDayBeforeSellInDate() {
Item[] items = new Item[]{new Item("Conjured Mana Cake", 10, 10)};
Item[] items = new Item[] { new Item("Conjured Mana Cake", 10, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(8, app.items.get(0).quality);
@ -259,7 +273,7 @@ class GildedRoseTest {
@Test
public void sellInDateDecreasesByOneEachDayForConjuredItem() {
Item[] items = new Item[]{new Item("Conjured Mana Cake", 2, 10)};
Item[] items = new Item[] { new Item("Conjured Mana Cake", 2, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(1, app.items.get(0).sellIn);
@ -271,7 +285,7 @@ class GildedRoseTest {
@Test
public void conjuredItemsQualityDecreasesByFourEachDayAfterSellInDate() {
Item[] items = new Item[]{new Item("Conjured Mana Cake", 1, 10)};
Item[] items = new Item[] { new Item("Conjured Mana Cake", 1, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(8, app.items.get(0).quality);