假设我有一个类,代表使用多种不同定价策略之一定价的产品。这个定价每秒发生几百次,所以为了消除重复的if / else语句,我改为使用委托来启动适当的策略,如下所示:
Private Delegate Sub PricingModel(ByVal params As PricingParameters)
Private myPricingModel As PricingModel
Private myPricingParameters As PricingParameters
Public Sub RunPricingModel()
myPricingModel(myPricingParameters)
End Sub
我的问题是:如果我希望能够改变策略,我该如何处理myPricingModel?目前我只是将其设置为新的PricingModel:
Public Sub SwitchStrategy(ByVal strategy As PricingStrategy)
Select Case strategy
Case PricingStrategy.STRATEGY_X
myPricingModel = New PricingModel(AddressOf PricingModelStrategyX)
Case PricingStrategy.STRATEGY_Y
myPricingModel = New PricingModel(AddressOf PricingModelStrategyY)
Case Else
Exit Sub
End Select
End Sub
但这对我来说并不合适(虽然它似乎有效)。是否有接受/更好的方式这样做?或者这是标准方式?或者这只是一个从一开始就注定失败的方法?
答案 0 :(得分:4)
这种整体方法没有任何内在错误。只要PricingStrategy以其他方式被接受作为枚举,那么这是一种完全可以接受的方式来改变不同定价策略的私人行为。
我唯一的挑剔评论是,在“Case Else”中你应该避免默默失败。
答案 1 :(得分:0)
您可以使用定价策略(C#)的静态类:
public static class PricingStrategies {
public static PricingStrategyX( PricingParameters parameters ) { /* here is body */ }
public static PricingStrategyY( PricingParameters parameters ) { /* here is body */ }
}
// ... somewhere elsewhere ...
public PricingStrategyDelegate Pricing;
// ...
this.Pricing = PricingStrategies.PricingStrategyX;