private async Task StartStrategies(IEnumerable <IStrategySettingDTO> newStrats) { var newStrategies = newStrats.Where(x => !this.strategies.Select(y => y.strategyInfo).Contains(x)); List <IStrategy> toStartStrats = new List <IStrategy>(); List <Task <IStrategy> > tasks = new List <Task <IStrategy> >(); foreach (IStrategySettingDTO s in newStrategies) { tasks.Add(strategyFactory.CreateStrategy(s, this.currencySemaphosres, this.concurrentSemaphore)); } List <IStrategy> strats = (await Task.WhenAll(tasks)).ToList(); toStartStrats.AddRange(strats); //Start Strategies foreach (IStrategy strat in toStartStrats) { this.PlatformLogService.Log(platformJob.ID, userId, $"Starting strategy {strat.Name}", eventType.Info); CancellationTokenSource token = new CancellationTokenSource(); this.strategyTokens.Add(strat.Name, token); await strat.Start(token); } this.strategies.AddRange(toStartStrats); }
public void ExecuteStrategy(string args) { var strategy = StrategyFactory.CreateStrategy(args); if (strategy != null) { strategy.AlgorithmMethod(); } }
public void CreateStrategy_當傳入參數deliveryType為PostOffice時_應回傳PostOfficeStrategy的實體() { // Arrange var deliveryType = DeliveryTypeEnum.PostOffice; // Act var actual = StrategyFactory.CreateStrategy(deliveryType); // Assert actual.Should().BeOfType <PostOfficeStrategy>(); }
public void CreateStrategy_當傳入參數deliveryType為KTJ時_應回傳KtjStrategy的實體() { // Arrange var deliveryType = DeliveryTypeEnum.KTJ; // Act var actual = StrategyFactory.CreateStrategy(deliveryType); // Assert actual.Should().BeOfType <KtjStrategy>(); }
/// <summary> /// 計算運費。 /// </summary> /// <param name="deliveryItem">宅配資料。</param> /// <returns> /// 運費。 /// </returns> /// <exception cref="ArgumentNullException">deliveryItem - 請檢查 deliveryItem 參數。</exception> public double Calculate(DeliveryEntity deliveryItem) { if (deliveryItem == null) { throw new ArgumentNullException(nameof(deliveryItem), $"請檢查 {nameof(deliveryItem)} 參數。"); } var strategy = StrategyFactory.CreateStrategy(deliveryItem.DeliveryType); double fee = strategy.Calculate(deliveryItem); return(fee); }
public void CreateStrategy_當傳入參數deliveryType的列舉值未定義宅配策略時_應拋出ArgumentException的例外狀況() { // Arrange var deliveryType = (DeliveryTypeEnum)99; var message = $"請檢查 deliveryType 參數。{Environment.NewLine}參數名稱: deliveryType"; // Act Action action = () => StrategyFactory.CreateStrategy(deliveryType); // Assert action.ShouldThrow <ArgumentException>().And.Message.Should().Be(message); }
public void Run() { string input; while ((input = Console.ReadLine()) != "End") { string[] tokens = input.Split(); if (tokens[0] == "mode") { string @operator = tokens[1]; StrategyFactory strategyFactory = new StrategyFactory(); IStrategy strategy = strategyFactory.CreateStrategy(@operator); this.calculator.ChangeStrategy(strategy); } else { int firstOperand = int.Parse(tokens[0]); int secondOperand = int.Parse(tokens[1]); Console.WriteLine(this.calculator.performCalculation(firstOperand, secondOperand)); } } }
public void ChangeStrategy(char @operator) { currentStrategy = strategyFactory.CreateStrategy(@operator); }