我遇到了一个使用Java学习OOAD和TDD的购物车练习。
练习是:
第一步:设计结账系统
下一步:增强代码以应用以下折扣和优惠
买一个面包,免费得到另一个面包买3个牛奶2个买2个香蕉,免费得到一个
首先构建一个最简单的解决方案,以单独满足第一种情况。然后重新分解代码,将其扩展到第二步。
第一步似乎很容易,但当涉及到第二步时,应用适当的OOAD原则和设计模式是具有挑战性的。我看了两个相关的问题,比如这一个。但这并没有多大帮助。感谢您对如何进行的任何建议。
第一步我可以想到的代码是:
>
购物车测试。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));
}}
购物车。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
}
本文向大家介绍简单的php购物车代码,包括了简单的php购物车代码的使用技巧和注意事项,需要的朋友参考一下 本文介绍一个php实现的购物车代码,功能实现完整,具有一定的参考价值 这里我们为你提供个简单的php购物车代码,从增加购物产品与发生购买了,在商城开发中,这个功能是少不了的 具体分析如下: 对购物车里商品的操作大体上有以下几个:添加商品,删除商品,以及提交订单; 方法本质是:把session
本文向大家介绍使用Angular.js实现简单的购物车功能,包括了使用Angular.js实现简单的购物车功能的使用技巧和注意事项,需要的朋友参考一下 先给大家分享实现代码,在代码下面有效果图展示,大家可以两者结合参考下,废话不多说了,具体代码如下所示: 效果图展示如下: 以上所述是小编给大家介绍的使用Angular.js实现简单的购物车功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编
本文向大家介绍Ajax修改购物车示例,包括了Ajax修改购物车示例的使用技巧和注意事项,需要的朋友参考一下 1.购物车类的设计 ShoppingCartItem:书的封装,包括书名,数量,价格三个属性,以及对应的getter和setter方法。 ShoppingCart:购物车封装类,items为 Map<String, ShoppingCartItem> ,以及加入购物车,得到购物车中书的总数量
用 CAAnimation 的基础动画组合而成的加入购物车动画效果。点击价格按钮,价格会从按钮沿着一定路径落入购物车。 作者说:初学者可看一下,高手勿喷。 [Code4App.com]
本文向大家介绍PHP购物车类Cart.class.php定义与用法示例,包括了PHP购物车类Cart.class.php定义与用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP购物车类Cart.class.php定义与用法。分享给大家供大家参考,具体如下: 之前的开发人员使用了JS的技术开发了一套前台购物车(删除添加什么的都使用JS),但是浏览器兼容不好, 今天终于出问题了,
本文向大家介绍Angular实现购物车计算示例代码,包括了Angular实现购物车计算示例代码的使用技巧和注意事项,需要的朋友参考一下 使用AngularJS实现一个简单的购物车,主要感受强大的双向绑定和只关注对象不关注界面特性。 先看看界面: 点击+-操作和删除: 这些全部只需要操作数据源就行,不需要关注界面。 实现过程: 一、使用任何语言创建一个服务端: 二、前台实现: 三、Angular部分