コード例 #1
0
        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);
        }
コード例 #2
0
        public void ExecuteStrategy(string args)
        {
            var strategy = StrategyFactory.CreateStrategy(args);

            if (strategy != null)
            {
                strategy.AlgorithmMethod();
            }
        }
コード例 #3
0
        public void CreateStrategy_當傳入參數deliveryType為PostOffice時_應回傳PostOfficeStrategy的實體()
        {
            // Arrange
            var deliveryType = DeliveryTypeEnum.PostOffice;

            // Act
            var actual = StrategyFactory.CreateStrategy(deliveryType);

            // Assert
            actual.Should().BeOfType <PostOfficeStrategy>();
        }
コード例 #4
0
        public void CreateStrategy_當傳入參數deliveryType為KTJ時_應回傳KtjStrategy的實體()
        {
            // Arrange
            var deliveryType = DeliveryTypeEnum.KTJ;

            // Act
            var actual = StrategyFactory.CreateStrategy(deliveryType);

            // Assert
            actual.Should().BeOfType <KtjStrategy>();
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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));
                }
            }
        }
コード例 #8
0
 public void ChangeStrategy(char @operator)
 {
     currentStrategy = strategyFactory.CreateStrategy(@operator);
 }