Design patterns 运行时选择算法的设计模式
在我们的项目中,我们经常根据一些条件选择算法 例如,假设我们需要打印不同产品的订单。我们需要根据产品类型、价格或任何其他产品特性选择不同的空白并检索不同的数据。通常,我们写这样的东西Design patterns 运行时选择算法的设计模式,design-patterns,Design Patterns,在我们的项目中,我们经常根据一些条件选择算法 例如,假设我们需要打印不同产品的订单。我们需要根据产品类型、价格或任何其他产品特性选择不同的空白并检索不同的数据。通常,我们写这样的东西 public interface IOrderPrinter { bool CanPrint(Order order); PrintResult Print(Order order); } class CompositeOrderPrinter : IOrderPrinter { priv
public interface IOrderPrinter
{
bool CanPrint(Order order);
PrintResult Print(Order order);
}
class CompositeOrderPrinter : IOrderPrinter
{
private IList<IOrderPrinter> printers;
public bool CanPrint(Order order)
{
return printers.Any(p => p.CanPrint(order));
}
public PrintResult Print(Order order)
{
foreach (var printer in printers)
{
if (printer.CanPrint(order))
return printer.Print(order);
}
// throw some exception
}
public void AddPrinter(IOrderPrinter printer)
{
printers.Add(printer);
}
}
class FirstOrderPrinter : IOrderPrinter
{
public bool CanPrint(Order order)
{
return order.ProductType == ProductType.Banana && order.Price < 100;
}
public PrintResult Print(Order order)
{
if (!CanPrint)
// throw some exception
// print ...
}
}
class SecondOrderPrinter : IOrderPrinter
{
public bool CanPrint(Order order)
{
return order.ProductType == ProductType.Apple;
}
public PrintResult Print(Order order)
{
if (!CanPrint)
// throw some exception
// print ...
}
}
这个图案有什么众所周知的名字吗?是的,它看起来和复合模式非常相似,但还是有区别的。是否有任何标准的设计模式可以更好地解决这个问题,更优雅,更少的代码。。。方法阅读其他实现类似行为的方法会很有趣。当您在运行时选择算法时,它被称为 在计算机编程中,策略模式(也称为策略模式)是一种软件设计模式,可以在运行时选择算法的行为
正如Philipp所说,这是您已经实施的战略模式。 这是另一种选择
但是,如果在您的特定情况下失去灵活性是可以的,您需要接听电话。事实上,它们并不是相互排斥的。您可以使用模板方法模式在内部实现策略。在打印机示例中,您可以创建一个基类来处理if!CanPrint//抛出一些异常。是的,谢谢!我更仔细地阅读了战略模式,注意到上下文可以直接或通过某些工厂选择具体的战略。