Предположим, у меня есть класс, который представляет продукт, который будет оцениваться с использованием одной из нескольких различных ценовых стратегий. Это ценообразование происходит сотни раз в секунду, поэтому для исключения повторяющихся операторов 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
Но мне это не кажется правильным (хотя, похоже, работает). Есть ли принятый / лучший способ сделать это? Или это стандартный способ? Или это просто обреченный подход с самого начала?