示例#1
0
        public IPriceCalculationStrategy GetStrategy(DateTime runDate)
        {
            var defStrategy = new DefaultPriceCalculationStrategy(_runRepository, _trainRepository);

            if (IsHoliday(runDate))
            {
                return(new HolidaysPriceCalculationDecorator(defStrategy));
            }
            else
            {
                return(defStrategy);
            }
        }
示例#2
0
        public IPriceCalculationStrategy GetStrategy(IRunRepository runRepository, ITrainRepository trainRepository, DTO dto = null)
        {
            var defStrategy = new DefaultPriceCalculationStrategy(runRepository, trainRepository);

            if (dto == null &&
                dto.TeaCount == 0 &&
                dto.CoffeeCount == 0 &&
                dto.CookiesCount == 0)
            {
                return(defStrategy);
            }
            else
            {
                return(new PriceCalculationDecorator(defStrategy, dto.TeaCount, dto.CoffeeCount, dto.CookiesCount));
            }
        }
        public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun)
        {
            var run   = _runRepository.GetRunDetails(placeInRun.RunId);
            var train = _trainRepository.GetTrainDetails(run.TrainId);

            var components = new DefaultPriceCalculationStrategy(_runRepository, _trainRepository).
                             CalculatePrice(placeInRun);

            if (_trainRepository.GetTrainDetails(placeInRun.Run.TrainId).Booking != null)
            {
                components.AddRange(new BookingPriceCalculationStrategy(_runRepository, _trainRepository).
                                    CalculatePrice(placeInRun));
            }

            return(components);
        }
 public DefaultPriceCalculationDecorator(DefaultPriceCalculationStrategy strategy, ITrainRepository trainRepository)
 {
     _strategy        = strategy;
     _trainRepository = trainRepository;
 }