mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-19 00:11:35 +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;
|
package com.gildedrose;
|
||||||
|
|
||||||
class GildedRose {
|
class GildedRose {
|
||||||
Item[] items;
|
public Item[] items;
|
||||||
|
|
||||||
public GildedRose(Item[] items) {
|
public GildedRose(Item[] items) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
@ -9,54 +9,8 @@ class GildedRose {
|
|||||||
|
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
for (int i = 0; i < items.length; i++) {
|
for (int i = 0; i < items.length; i++) {
|
||||||
if (!items[i].name.equals("Aged Brie")
|
System.out.println(items[i].getClass());
|
||||||
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
items[i] = items[i].updateQuality(items[i]);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -14,6 +14,12 @@ public class Item {
|
|||||||
this.quality = quality;
|
this.quality = quality;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Item updateQuality(Item item) {
|
||||||
|
System.out.println("Unkown item : " + item.name);
|
||||||
|
return item;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return this.name + ", " + this.sellIn + ", " + this.quality;
|
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
|
@Test
|
||||||
void foo() {
|
void foo() {
|
||||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose gildedRose = new GildedRose(items);
|
||||||
app.updateQuality();
|
gildedRose.updateQuality();
|
||||||
assertEquals("fixme", app.items[0].name);
|
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