gpt4 book ai didi

c# - 在应用策略模式时,是否有一种好的方法可以避免某些子类中未使用的方法参数?

转载 作者:太空狗 更新时间:2023-10-29 18:21:08 25 4
gpt4 key购买 nike

我有以下场景,其中我有不同种类的销售算法来计算销售价格。 FixedSaleStrategy 不需要 basePrice 参数,而所有其他策略实现都需要它。有什么好的方法可以避免这个冗余参数吗?

public abstract class SalesStrategy
{
public abstract double GetPrice(double basePrice, double saleAmount);
}
public class AmountOffSale : SalesStrategy
{
public override double GetPrice(double basePrice, double salesAmount)
{
return basePrice - salesAmount;
}
}
public class FixedPriceSale : SalesStrategy
{
public override double GetPrice(double basePrice, double salesAmount)
{
return salesAmount;
}
}

最佳答案

策略模式的核心思想是调用代码不知道被调用的实现。

如果您要更改每个实现使用的参数,您会发现您无法获得此模式的全部好处:调用者需要知道将使用哪个实现以及如何调用它。

我倾向于传递一个包含 super 信息集的类(类似于 PricingInfo),它总是以相同的方式填充(理想情况下集中在代码中),唯一的区别是策略的实现.

其中一个好处是我可以向我的 PricingInfo 类添加一个过去不相关的属性(比如 systemDiscount),并且对整个系统的影响不会太大。

关于c# - 在应用策略模式时,是否有一种好的方法可以避免某些子类中未使用的方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3376084/

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