gpt4 book ai didi

oop - 为购物车设计一个总成本计算器

转载 作者:行者123 更新时间:2023-12-01 13:48:13 25 4
gpt4 key购买 nike

这是在面试中问我的问题,我得到的反馈是我缺乏 OOD 技能。所以我想知道我建议的设计有什么问题。

问题陈述:
设计一个有助于计算购物车中商品总成本的系统。
您将获得购物车中带有折扣的商品列表,如下例所示。该列表将包含项目或折扣,并且顺序很重要:

sample 车:
10 美元 Book xyz,所有商品 10% 折扣,20 美元文具,下一件商品 20% 折扣,100 美元衬衫,第 5 件 Type Book 减 15 美元。

折扣类型:
所有商品 10% 折扣
下一件商品可享受 20% 的折扣
打字书第 5 件立减 15 美元
(更多类型的折扣可以稍后添加到系统中)

我给出的解决方案:

这是我制作的类图:
Class Diagram

这是 TotalCost() 算法:

public decimal TotalCost(List<CartItem> cartItems)
{
var totalCost =0.0;
var items = cartItems.where(c => c.Item!=null).Select(c.Item);
foreach(var cartItem in cartItems)
{
if(cartItem.Coupon != Null)
{
cartItem.CouponType.CalculateDiscounts(items);
}
}

foreach(var item in items)
{
totalCost += item.DiscountedCost;
}

return totalCost;
}

最佳答案

在我看来,您的解决方案的主要缺陷是您的商品类别正在聚合折扣类别。我认为无论谁看了你的解决方案都没有继续通过这一点。

按项目汇总的折扣(优惠券)表明一个项目只能有一个折扣,而在您的情况下并非如此。拥有优惠券列表也无济于事,因为他们确实指出购物车中包含的列表将包含商品或折扣 .这通常表明多态性和基本(超)类型。

他们可能正在寻找一种或多或少类似于以下内容的解决方案:

类层次结构 -

interface CartItem {
}

interface Product extends CartItem {
public int price();
public void updatePrice(int updatedPrice);
}

interface Discount extends CartItem {
public void applyDiscount(List<CartItem> cartItems);
}

算法 -
List<CartItem> cartItems = cart.getItems();
List<Discount> discounts = extractDiscountsFromItems(cartItems);
applyDiscountsOnCartItems(discounts, cartItems);
List<Products> discountProducts = extractProductsFromItems(cartItems);
int totalAmount = calculateAmount(discountProducts);
return totalAmount;

在不支持过滤集合的语言中,您可以使用访问者模式来过滤项目。

关于oop - 为购物车设计一个总成本计算器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com