[英]How to design the classes for a simple shopping cart example using TDD approach?
我遇到了一个购物车练习,以使用Java学习OOAD和TDD。
练习是:
第一步 :设计一个结帐系统
下一步 :增强代码以应用以下折扣和优惠
买一个面包免费获得另一只面包以2的价格购买3牛奶买2香蕉免费获得
首先建立一个最简单的解决方案,以单独满足第一种情况。 然后重构代码以将其扩展到第二步。
第一步似乎很容易,但是当涉及到第二步时,应用适当的OOAD原理和设计模式将具有挑战性。 我看了几个相关的问题,例如
这个 。 但这并没有太大帮助。 感谢有关如何进行的任何建议。
我可以为第一步准备的代码是:
ShoppingCartTest.java:
public class ShoppingCartTest { ShoppingCart cart; @Before public void setUp(){ cart = new ShoppingCart(); } @Test public void addOneItemToCart() { cart.add("Bread"); assertThat(cart.getTotalItems(), is(1)); assertThat(cart.doesContain("Bread"), is(true)); } @Test public void addTwoItemsToCart(){ cart.add("Bread"); cart.add("Milk"); assertThat(cart.getTotalItems(), is(2)); assertTrue(cart.doesContain("Bread")); assertTrue(cart.doesContain("Milk")); } @Test public void addThreeItemsToCart(){ cart.add("Bread"); cart.add("Milk"); cart.add("Banana"); assertThat(cart.getTotalItems(), is(3)); assertTrue(cart.doesContain("Bread")); assertTrue(cart.doesContain("Milk")); assertTrue(cart.doesContain("Banana")); } @Test public void addAnItemTwice(){ cart.add("Bread"); cart.add("Bread"); assertThat(cart.getTotalItems(), is(2)); } @Test public void checkOutOneItem(){ cart.add("Bread"); assertThat(cart.checkout(), is(1.0)); } @Test public void checkoutTwoSeparateItems(){ cart.add("Bread"); cart.add("Milk"); assertThat(cart.checkout(), is(1.60)); } @Test public void checkoutThreeSeparateItems(){ cart.add("Bread"); cart.add("Milk"); cart.add("Banana"); assertThat(cart.checkout(), is(2.0)); } @Test public void checkoutTwoSameItems(){ cart.add("Bread"); cart.add("Bread"); assertThat(cart.checkout(), is(2.0)); } @Test public void checkoutThreeItems(){ cart.add("Bread"); cart.add("Bread"); cart.add("Milk"); assertThat(cart.checkout(), is(2.6)); } @Test public void checkoutManyItems(){ cart.add("Bread"); cart.add("Bread"); cart.add("Milk"); cart.add("Milk"); cart.add("Banana"); assertThat(cart.checkout(), is(3.60)); } @Test public void checkOutAnInvalidItem(){ cart.add("InvalidItem"); assertThat(cart.checkout(),is(0.0)); }}
Shopping Cart.java:
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
List<String> items;
public ShoppingCart(){
items = new ArrayList<String>();
}
public void add(String item) {
items.add(item);
}
public int getTotalItems() {
return items.size();
}
public Boolean doesContain(String itemName) {
return items.contains(itemName);
}
public Double checkout() {
double total = 0;
for(String item: items){
if(item.equals("Bread")){
total += 1;
}else if(item.equals("Milk")){
total += 0.6;
}else if(item.equals("Banana")){
total += 0.4;
}
}
return total;
}
}
相反,您可以在Java中将HashMap轻松实现为购物车过程
它的形式为:
Map<String === itemname , Item === Item object>
Map<String, Item> cart = new HashMap<String, Item>();
Class Item{
private int count;
private String Name;
private int prices;
//getters and setters go here
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.