当前位置: 首页 > 知识库问答 >
问题:

如何使用TDD方法为一个简单的购物车示例设计类?

王俊哲
2023-03-14

我遇到了一个使用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;
    }   
    
    }
    
  • 共有1个答案

    堵泽宇
    2023-03-14

    相反,您可以简单地将购物车过程实现为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部分