mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-18 16:01:42 +00:00
Refactored with Polymorphism.
Thinking Loterijen uses own proprietary software
This commit is contained in:
parent
179a22ecfa
commit
116e9b12a5
28
Java/src/main/java/com/gildedrose/AgedBrie.java
Normal file
28
Java/src/main/java/com/gildedrose/AgedBrie.java
Normal 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;
|
||||
}
|
||||
}
|
||||
23
Java/src/main/java/com/gildedrose/AgedBrieStategy.java
Normal file
23
Java/src/main/java/com/gildedrose/AgedBrieStategy.java
Normal 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;
|
||||
}
|
||||
}
|
||||
45
Java/src/main/java/com/gildedrose/BackStagePass.java
Normal file
45
Java/src/main/java/com/gildedrose/BackStagePass.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -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]);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
|
||||
5
Java/src/main/java/com/gildedrose/ItemStrategy.java
Normal file
5
Java/src/main/java/com/gildedrose/ItemStrategy.java
Normal file
@ -0,0 +1,5 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public interface ItemStrategy {
|
||||
Item updateItem(Item item);
|
||||
}
|
||||
13
Java/src/main/java/com/gildedrose/Sulfuras.java
Normal file
13
Java/src/main/java/com/gildedrose/Sulfuras.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
31
Java/src/test/java/com/gildedrose/TestItems.java
Normal file
31
Java/src/test/java/com/gildedrose/TestItems.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user