我正在设计 OOP 系统。
在这个系统中:
示例:假设自行车价格 100 ,那么我们有 4 价格 100 的自行车,然后是我将对每辆单独的自行车申请一些折扣并计算总数。同样地,我可以有不同的价格,并应用不同的计算逻辑(折扣等)。
所以基本上我想通过多态来做到这一点并牢记 SOLID 原则。如果没有梯子,我也不想拥有if else,因为我希望能够在不改变每个类的实现的情况下添加新的价格/折扣。
任何帮助表示赞赏
编辑:改进格式
答案 0 :(得分:1)
您可以做的如下:
您可以创建一个界面来描述折扣逻辑。 (如果你愿意的话,Discount
课程也可以int
,但也许你还有其他一些想要与折扣金额一起返回的东西。
public interface IOrderDiscount
{
Discount GetDiscount(Order order);
}
然后,您可以实施您支持的不同类型的折扣。例如:
public class FourBikesDiscount : IOrderDiscount
{
public Discount GetDiscount(Order order)
{
//TODO - check the order according to this specific type of discount
}
}
public class AnyOtherDiscountLogic : IOrderDiscount
{
public Discount GetDiscount(Order order)
{
throw new NotImplementedException();
}
}
现在,将对给定订单应用折扣的类应该通过以下方式之一将其作为依赖项接收:
如果您想根据某些逻辑向每个订单申请特定折扣,请使用类似于此界面的工厂:(并将其传递给ctor的参数。
公共接口IDiscountFactory { public IOrderDiscount GetDiscountOptions(Order order); }
答案 1 :(得分:0)
基本上我想要实现的目标如下。我有以下示例代码库:
switch (line.Bike.Price)
{
case Bike.OneThousand:
if (line.Quantity >= 20)
thisAmount += line.Quantity * line.Bike.Price * .9d;
else
thisAmount += line.Quantity * line.Bike.Price;
break;
case Bike.TwoThousand:
if (line.Quantity >= 10)
thisAmount += line.Quantity * line.Bike.Price * .8d;
else
thisAmount += line.Quantity * line.Bike.Price;
break;
}
这里基于自行车常数属性,逻辑正在激活。假设明天新的常量被引入,我将再次编写另一个case语句和一些逻辑。我希望这个过程是多态的。我应该能够像这样编写它:
Idiscount discount=new Discount();
Icalc calculate=new Calculate(line, Bike.OneThousand,discount)
在运行时我提供折扣计算界面,价格和计算将为我做。这样的事情。但我很困惑如何将价格与折扣挂钩,因为逻辑是根据自行车价格开出的。