Refactored with Polymorphism.

Thinking Loterijen uses own proprietary software
This commit is contained in:
MarceluitNL 2021-04-18 19:08:41 +02:00
parent 179a22ecfa
commit 116e9b12a5
10 changed files with 157 additions and 89 deletions

View File

@ -0,0 +1,28 @@
package com.gildedrose;
public class AgedBrie extends Item {
public AgedBrie(String name, int sellIn, int quality) {
super(name, sellIn, quality);
}
public Item updateQuality(Item item) {
int newQuality = sellByDayPassed(item) ? item.quality + 2 : item.quality + 1;
if(isQualityGreaterThanFifty(newQuality)) {
newQuality = 50;
}
return new AgedBrie(item.name, item.sellIn - 1, newQuality);
}
private boolean sellByDayPassed(Item item) {
return item.sellIn < 1;
}
private boolean isQualityGreaterThanFifty(int newQuality) {
return newQuality > 50;
}
}

View File

@ -0,0 +1,23 @@
package com.gildedrose;
public class AgedBrieStategy implements ItemStrategy {
@Override
public Item updateItem(Item item) {
int newQuality = sellByDayPassed(item) ? item.quality + 2 : item.quality + 1;
if(isQualityGreaterThanFifty(newQuality)) {
newQuality = 50;
}
return new Item(item.name, item.sellIn - 1, newQuality);
}
private boolean sellByDayPassed(Item item) {
return item.sellIn < 1;
}
private boolean isQualityGreaterThanFifty(int newQuality) {
return newQuality > 50;
}
}

View File

@ -0,0 +1,45 @@
package com.gildedrose;
public class BackStagePass extends Item {
// "Sulfuras", being a legendary item, never has to be sold or decreases in Quality
int newQuality = 0;
public BackStagePass(String name, int sellIn, int quality) {
super(name, sellIn, quality);
}
public Item updateQuality(Item item) {
if (noSellin(item)) {
newQuality = 0;
} else if (sellin5DaysOrLess(item) ) {
newQuality = newQuality + 3;
} else if (sellin10DaysOrLess(item)) {
newQuality = newQuality + 2;
} else {
newQuality = newQuality + 1;
}
if (QualtyGT50(item)) {
newQuality = 50;
}
return new BackStagePass(item.name, item.sellIn - 1, newQuality);
}
private boolean QualtyGT50(Item item) {
return newQuality > 50;
}
private boolean sellin10DaysOrLess(Item item) {
// TODO Auto-generated method stub
return item.sellIn < 11;
}
private boolean sellin5DaysOrLess(Item item) {
return item.sellIn < 6;
}
private boolean noSellin(Item item) {
return item.sellIn < 1;
}
}

View File

@ -1,7 +1,7 @@
package com.gildedrose;
class GildedRose {
Item[] items;
public Item[] items;
public GildedRose(Item[] items) {
this.items = items;
@ -9,54 +9,8 @@ class GildedRose {
public void updateQuality() {
for (int i = 0; i < items.length; i++) {
if (!items[i].name.equals("Aged Brie")
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].quality > 0) {
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
items[i].quality = items[i].quality - 1;
}
}
} else {
if (items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].sellIn < 11) {
if (items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
}
}
if (items[i].sellIn < 6) {
if (items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
}
}
}
}
}
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
items[i].sellIn = items[i].sellIn - 1;
}
if (items[i].sellIn < 0) {
if (!items[i].name.equals("Aged Brie")) {
if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].quality > 0) {
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
items[i].quality = items[i].quality - 1;
}
}
} else {
items[i].quality = items[i].quality - items[i].quality;
}
} else {
if (items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
}
}
}
System.out.println(items[i].getClass());
items[i] = items[i].updateQuality(items[i]);
}
}
}

View File

@ -14,6 +14,12 @@ public class Item {
this.quality = quality;
}
public Item updateQuality(Item item) {
System.out.println("Unkown item : " + item.name);
return item;
}
@Override
public String toString() {
return this.name + ", " + this.sellIn + ", " + this.quality;

View File

@ -0,0 +1,5 @@
package com.gildedrose;
public interface ItemStrategy {
Item updateItem(Item item);
}

View File

@ -0,0 +1,13 @@
package com.gildedrose;
public class Sulfuras extends Item {
// "Sulfuras", being a legendary item, never has to be sold or decreases in Quality
public Sulfuras(String name, int sellIn, int quality) {
super(name, sellIn, quality);
}
public Item updateQuality(Item item) {
return new Sulfuras(item.name, item.sellIn, item.quality);
}
}

View File

@ -9,9 +9,9 @@ class GildedRoseTest {
@Test
void foo() {
Item[] items = new Item[] { new Item("foo", 0, 0) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals("fixme", app.items[0].name);
GildedRose gildedRose = new GildedRose(items);
gildedRose.updateQuality();
assertEquals("foo", gildedRose.items[0].name);
}
}

View File

@ -0,0 +1,31 @@
package com.gildedrose;
public class TestItems {
public static void main(String[] args) {
System.out.println("Start Testing");
Item[] items = new Item[] {
new AgedBrie("Aged Brie", 2, 0), //
new Sulfuras("Sulfuras", 10, 5) //
};
GildedRose gildedRose = new GildedRose(items);
int days = 3;
if (args.length > 0) {
days = Integer.parseInt(args[0]) + 1;
}
for (int i = 0; i < days; i++) {
System.out.println("-------- day " + i + " --------");
System.out.println("name, sellIn, quality");
for (Item item : items) {
System.out.println(item);
System.out.println();
gildedRose.updateQuality();
}
}
}
}

View File

@ -1,37 +0,0 @@
package com.gildedrose;
public class TexttestFixture {
public static void main(String[] args) {
System.out.println("OMGHAI!");
Item[] items = new Item[] {
new Item("+5 Dexterity Vest", 10, 20), //
new Item("Aged Brie", 2, 0), //
new Item("Elixir of the Mongoose", 5, 7), //
new Item("Sulfuras, Hand of Ragnaros", 0, 80), //
new Item("Sulfuras, Hand of Ragnaros", -1, 80),
new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
// this conjured item does not work properly yet
new Item("Conjured Mana Cake", 3, 6) };
GildedRose app = new GildedRose(items);
int days = 2;
if (args.length > 0) {
days = Integer.parseInt(args[0]) + 1;
}
for (int i = 0; i < days; i++) {
System.out.println("-------- day " + i + " --------");
System.out.println("name, sellIn, quality");
for (Item item : items) {
System.out.println(item);
}
System.out.println();
app.updateQuality();
}
}
}